为什么只有 WA on#8,其他 AC
查看原帖
为什么只有 WA on#8,其他 AC
1190117
JZJR_A_0楼主2024/10/21 16:10

测评记录

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int n,q,g[2000005],a[2000005];
struct xds{
	int l,r;
	LL sum,dum;
}t[2000005*4];
void back(int p){
	t[p].sum=t[p*2].sum+t[p*2+1].sum;
	t[p].dum=t[p*2].dum+t[p*2+1].dum;
}
void biuld(int l,int r,int p){
	t[p].l=l;t[p].r=r;
	if(l==r){t[p].sum=a[l],t[p].dum=a[l]*l;return ;}
	int mid=(l+r)>>1;
	biuld(l,mid,2*p);
	biuld(mid+1,r,2*p+1);
	back(p);
}
void change(int x,int p){
	if(t[p].l==t[p].r){
		t[p].sum=a[t[p].l];t[p].dum=a[t[p].l]*t[p].l;
		return ;
	}
	int mid=(t[p].l+t[p].r)>>1;
	if(x<=mid)change(x,2*p);
	else change(x,2*p+1);
	back(p);
}
LL asksum(int l,int r,int p){
	if(t[p].l>=l&&t[p].r<=r)return t[p].sum;
	else if(t[p].r<l||t[p].l>r)return 0;
	else return asksum(l,r,2*p)+asksum(l,r,2*p+1);
}
LL askdum(int l,int r,int p){
	if(t[p].l>=l&&t[p].r<=r)return t[p].dum;
	else if(t[p].r<l||t[p].l>r)return 0;
	else return askdum(l,r,2*p)+askdum(l,r,2*p+1);
}
int main (){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		int a;cin>>a;g[a]++;
	}
	for(int i=1;i<=n;i++)a[g[i]]++;
	biuld(1,2*n,1);
	while(q--){
		int op,x;
		cin>>op>>x;
		if(op==1){
			a[g[x]]--;change(g[x],1);
			g[x]++;a[g[x]]++;change(g[x],1);
		}
		if(op==2){
			a[g[x]]--;change(g[x],1);
			g[x]--;a[g[x]]++;change(g[x],1);
		}
		if(op==3){
			LL ans=askdum(x+1,2*n,1)-x*asksum(x+1,2*n,1);
			cout<<ans<<'\n';
		}
	}
	return 0;
}

它只 WA 一个点是因为什么问题,有大佬能解答(DEBUG)一下吗?

2024/10/21 16:10
加载中...