QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#693118#9528. New Energy VehicleZycK#WA 0ms4072kbC++141.7kb2024-10-31 15:34:082024-10-31 15:34:08

Judging History

This is the latest submission verdict.

  • [2024-10-31 15:34:08]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 4072kb
  • [2024-10-31 15:34:08]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; ll m;
const int maxn=1e5+4;
int a[maxn],x[maxn],t[maxn],b[maxn];
bool used[maxn];
int nxt[maxn];
void solve()
{
	scanf("%d%d",&n,&m);
	ll sum=0;
	for(int i=1;i<=n;i++)
	{
		used[i]=0;
		scanf("%d",&a[i]);
		b[i]=a[i];
		sum+=a[i]; 
	}
	set<pair<int,int> >S;
	set<int> U;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&x[i],&t[i]);
		if(!used[t[i]]) S.insert(make_pair(i,t[i])); 
		used[t[i]]=1;
	}
	nxt[m+1]=m+1;
	for(int i=m;i>=1;i--) 
	{
		if(t[i]==t[i+1]) nxt[i]=nxt[i+1];
		else nxt[i]=i+1;
	}
	for(int i=1;i<=n;i++)
	{
		if(!used[i]) U.insert(i); 
	}
	 
	for(int i=1;i<=m;i++)
	{
		if(sum<x[i]-x[i-1]) 
		{
			printf("%lld\n",x[i-1]+sum);
			return;
		}
		sum-=x[i]-x[i-1];
		ll tmp=x[i]-x[i-1];
		while(S.size())
		{
			int cur=(*S.begin()).second;
			int tt=(*S.begin()).first;
			S.erase((*S.begin())); 
			
			if(b[cur]>=tmp) 
			{
				b[cur]-=tmp; tmp=0; 
				S.insert(make_pair(tt,cur));
				break;	
			} 	
			else
				tmp-=b[cur],b[cur]=0;
		}
//		cerr<<sum<<endl;
		while(tmp&&U.size())
		{
			int cur=(*U.begin());
//			cerr<<cur<<endl;
			U.erase(cur); 
			if(b[cur]>=tmp)
			{
				b[cur]-=tmp; tmp=0;
				if(b[cur]) U.insert(cur);
				break;
			}
			else tmp-=b[cur],b[cur]=0;
		}

//		cerr<<sum<<" "<<a[t[i]]<<" "<<b[t[i]]<<endl;
		sum+=a[t[i]]-b[t[i]];
		b[t[i]]=a[t[i]];
		while(S.size()&&(*S.begin()).first<=i) 
			S.erase(S.begin());
//		cerr<<sum<<" "<<a[t[i]]<<endl;
		if(nxt[i]>m) U.insert(t[i]);
		else
		{
			S.insert(make_pair(nxt[i],t[i]));
		}
		
	}
	printf("%lld\n",x[m]+sum);
	
}
int main()
{
	int T; cin>>T; 
	while(T--) solve();	
}
/*
2
 3 1
 3 3 3
 8 1
 2 2
 5 2
 1 2
 2 1
 */

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 4072kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

12
9

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3820kb

input:

6
3 2
2 2 2
6 1
7 1
2 2
3 3
2 1
6 2
2 3
2 2
5 1
7 2
9 1
2 2
3 3
2 1
6 2
1 1
999999999
1000000000 1
1 1
1000000000
1000000000 1

output:

9
9
4
9
999999999
2000000000

result:

wrong answer 2nd lines differ - expected: '11', found: '9'