题目
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 1e14
#define lim 1e9
#define M 1000005
#define N 4000005
#define mid ((l+r)/2)
int n;
int val[M];
struct Tree{
int t[N],lson[N],rson[N],cnt=1;
inline int ls(int u){
if(lson[u]==0)lson[u]=++cnt;
return lson[u];
}
inline int rs(int u){
if(rson[u]==0)rson[u]=++cnt;
return rson[u];
}
void pushup(int now){
t[now]=t[ls(now)]+t[rs(now)];
}
int out(int now,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr){return t[now];}
int sum=0;
if(ql<=mid)sum+=out(ls(now),l,mid,ql,qr);
if(mid<qr)sum+=out(rs(now),mid+1,r,ql,qr);
return sum;
}
void in(int now,int l,int r,int pos,int val){
if(l==r){t[now]+=val;return;}
if(pos<=mid)in(ls(now),l,mid,pos,val);
if(mid<pos)in(rs(now),mid+1,r,pos,val);
pushup(now);
}
}t;
signed main(){
cin>>n;
while(n--){
int opt,x,l,r;
cin>>opt;
if(opt==1){
cin>>x;
t.in(1,-lim,lim,x,1);
}
else if(opt==2){
cin>>x;
t.in(1,-lim,lim,x,-1);
}
else{
cin>>l>>r;
cout<<t.out(1,-lim,lim,l,r)<<"\n";
}
}
return 0;
}
提交记录