QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#721573#9528. New Energy VehicleKOH-#WA 2ms11888kbC++142.7kb2024-11-07 16:24:272024-11-07 16:24:27

Judging History

This is the latest submission verdict.

  • [2024-11-07 16:24:27]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 11888kb
  • [2024-11-07 16:24:27]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x){
	x=0;char ch=getchar();bool f=false;
	while(!isdigit(ch))	f|=ch=='-',ch=getchar();
	while(isdigit(ch))	x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	x=f?-x:x;return;
} 
template <typename T>
inline void print(T x){
	if(x<0)	putchar('-'),x=-x;
	if(x>9)	print(x/10);
	putchar(x%10^48);return; 
}

#define int long long
#define ll long long 
const int N=1e5+3,M=1e5+3;
int a[N],n,m,p[N],t[N],rev[N];
vector<int> loc[N];

int sum[N<<2],lazy[N<<2];
#define ls x<<1
#define rs x<<1|1 
void Push_up(int x){
	sum[x]=sum[ls]+sum[rs];
	return; 
}
void Change(int x){
	lazy[x]=1,sum[x]=0;
	return;
}
void Push_down(int x){
	if(lazy[x]==1){
		Change(ls),Change(rs);
		lazy[x]=0;
	}
	return;
}
void Modify(int x,int l,int r,int go,int d){
	if(l==r)	return sum[x]=d,void();
	Push_down(x);
	int mid=(l+r)>>1;
	if(mid>=go)	Modify(ls,l,mid,go,d);
	else Modify(rs,mid+1,r,go,d);
	Push_up(x);return;
}
void Add(int x,int l,int r,int go,int d){
	if(l==r)	return sum[x]+=d,void();
	Push_down(x);
	int mid=(l+r)>>1;
	if(mid>=go)	Add(ls,l,mid,go,d);
	else Add(rs,mid+1,r,go,d);
	Push_up(x);return;
}
void Cover(int x,int l,int r,int L,int R){
	if(l>=L&&r<=R)	return Change(x),void();
	Push_down(x);
	int mid=(l+r)>>1;
	if(mid>=L)	Cover(ls,l,mid,L,R);
	if(mid<R)	Cover(rs,mid+1,r,L,R);
	return; 
}
int Query(int x,int l,int r,int L,int R){
	if(l>=L&&r<=R)	return sum[x];
	Push_down(x);int mid=(l+r)>>1,res=0;
	if(mid>=L)	res+=Query(ls,l,mid,L,R);
	if(mid<R)	res+=Query(rs,mid+1,r,L,R);
	return res;
}
int Search(int x,int l,int r,int s,int lim){
	if(l==r)	return l;
	int mid=(l+r)>>1;
	if(s+sum[ls]>=lim)	return Search(ls,l,mid,s,lim);
	else return Search(rs,mid+1,r,s+sum[ls],lim);
}
signed main(){
	int T;read(T);
	while(T--){
		read(n);read(m);
		for(int i=1;i<=n;++i)	loc[i].clear();
		for(int i=1;i<=(n<<2);++i)	sum[i]=0,lazy[i]=0;
		for(int i=1;i<=m;++i)	rev[i]=0;
		for(int i=1;i<=n;++i) read(a[i]);
		
		for(int i=1;i<=m;++i){
			read(p[i]),read(t[i]);
			loc[t[i]].push_back(i);
			rev[i]=loc[t[i]].size()-1;
		}
		for(int i=1;i<=n;++i)	loc[i].push_back(m+1);
		for(int i=1;i<=n;++i)	Add(1,1,m+1,loc[i][0],a[i]);
		int ans=0;
		for(int i=1;i<=m;++i){
			if(p[i]-p[i-1]>sum[1]) break;
			ans=i;
			int now=Search(1,1,m+1,0,p[i]-p[i-1]);
			int s=Query(1,1,m+1,1,now);
			int d=s-p[i]-p[i-1];
//			cout<<now<<" "<<s<<" "<<d<<"??\n"; 
			if(now-1>=1) Cover(1,1,m+1,1,now-1);
			Modify(1,1,m+1,now,d);
			Modify(1,1,m+1,i,0); 
			Add(1,1,m+1,loc[t[i]][rev[i]+1],a[t[i]]);
		}
		
		ans=p[ans]+sum[1]; 
		print(ans),putchar('\n');
	}
	return 0;
}
	

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 11888kb

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: 2ms
memory: 9720kb

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
7
4
7
999999999
2000000000

result:

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