rt.
我的做法:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000000;
int n,Q,l;
int a[N+10],c[N+10],to[N+10];
ll ans;
struct node{
int x;
}d[N+10];
int main()
{
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(!c[a[i]])
{
d[++l].x=a[i];
to[a[i]]=l;
}
c[a[i]]++;
}
while(Q--)
{
int opt,x;
scanf("%d%d",&opt,&x);
if(opt==1)
{
if(!c[x])
{
d[++l].x=x;
to[x]=l;
}
c[x]++;
}
else if(opt==2)
{
c[x]--;
if(!c[x])
{
d[to[x]].x=0;
}
}
else if(opt==3)
{
ans=0;
for(int i=1;i<=l;i++)
{
if(!d[i].x) continue;
//cout<<max(c[d[i].x]-x,0)<<" ";
ans=ans+max(c[d[i].x]-x,0);
}//cout<<endl;
printf("%lld\n",ans);
}
}
return 0;
}
算是偏正解?