#include<bits/stdc++.h>
using namespace std;
int n,q,s,op,k,a[1000001],Max,T[1000001];
int ans(int x){
int sum=0;
for(;x>0;x-=(x&-x)) sum+=T[x];
x--;
for(;x>0;x-=(x&-x)) sum-=T[x];
return sum;
}
void pl(int x,int y,int k){
if(x>y) return ;
y++;
for(;x<=n;x+=(x&-x)) T[x]+=k;
for(;y<=n;y+=(y&-y)) T[y]-=k;
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%d",&s);
pl(1,a[s],1);
a[s]++;
}
for(int i=1;i<=q;i++){
scanf("%d%d",&op,&k);
if(op==1) pl(1,a[k],1),a[k]++;
else if(op==2) a[k]--,pl(1,a[k],-1);
else printf("%d\n",max(0,ans(k)));
}
return 0;
}
用的树状数组,应该不是数组开小了,开到 2×106 也不行。
