#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define eps 1e-2
#define gcd __gcd
#define pb push_back
#define PI acos(-1.0)
#define lowbit(x) (x)&(-x)
#define bug printf("!!!!!\n");
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef unsigned long long uLL;
const int maxn = 5e6+2;
const int INF = 1<<30;
const int mod = 1e9+7;
int q,tr[maxn][3],cnt=1,a[maxn];
void add(int x,int val){
int now=1;
for(int i=30;i>=0;i--){
a[now]+=val;
int tp=(1<<i)&x;tp=(tp==0?0:1);
if(tr[now][tp]==0) tr[now][tp]=++cnt;
now=tr[now][tp];
}
a[now]+=val;
}
int ask(int A,int B){
int ans=0,now=1;
for(int i=30;i>=0;i--){
int x=A&(1<<i),y=B&(1<<i);
int tp=(x>0)?1:0;
// cout<<x<<" "<<y<<endl;
if(x<y) ans+=a[tr[now][0]];
if(x&&y) ans+=a[tr[now][1]];
if(y==0) now=tr[now][tp];
else now=tr[now][tp^1];
}
return ans;
}
void solve(){
scanf("%d",&q);
while(q--){
int op,x,y;
scanf("%d",&op);
if(op==1){
scanf("%d",&x);
add(x,1);
}else if(op==2){
scanf("%d",&x);
add(x,-1);
}else{
scanf("%d%d",&x,&y);
cout<<ask(x,y)<<endl;
}
}
return;
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
// ios::sync_with_stdio(false);
int t = 1;
//scanf("%d",&t);
while(t--){
// printf("Case %d: ",cas++);
solve();
}
return 0;
}
Educational Codeforces Round 23 E. Choosing The Commander
最新推荐文章于 2022-09-04 18:17:53 发布