30 分,WA #4∼10
# include<bits/stdc++.h>
# define int long long
using namespace std;
int a[500005],num[500005],sum[500005];
bitset<500005>f;
signed main()
{
cin.tie(0)->sync_with_stdio(0);
int n,m,ans=0,size;
cin>>n>>m;
size=sqrt(500000);
for(int i=1;i<=500000;i++) num[i]=(i-1)/size+1;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum[num[i]]++;
ans+=a[i];
f[i]=1;
}
for(int i=1;i<=m;i++)
{
char op;
cin>>op;
switch(op){
case 'C':{
int x,y;
cin>>x>>y;
if(!f[x]) break;
ans-=y;
a[x]-=y;
break;
}
case 'I':{
int x,y;
cin>>x>>y;
if(!f[x])
{
f[x]=1;
sum[num[x]]++;
}
ans=ans-a[x]+y;
a[x]=y;
break;
}
case 'D':{
int x,pos=1;
cin>>x;
while(x-sum[pos]>0)
{
x-=sum[pos];
pos++;
}
for(int i=(pos-1)*size+1;i<=min(pos*size,n);i++)
{
if(f[i]) x--;
if(!x)
{
sum[pos]--;
f[i]=0;
ans-=a[i];
a[i]=0;
break;
}
}
break;
}
case 'Q':{
cout<<ans<<"\n";
break;
}
}
}
return 0;
}