题目链接
思路:标准的01字典树模板。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+1;
int cnt=0,tree[32*maxn][2],sum[32*maxn];
void insert(int x)
{
int u=0;
for(int i=31;i>=0;--i)
{
int t=(((1LL<<i)&x)?1:0);
if(!tree[u][t]) tree[u][t]=++cnt;
sum[tree[u][t]]++;
u=tree[u][t];
}
}
void update(int x)
{
int u=0;
for(int i=31;i>=0;--i)
{
int t=(((1LL<<i)&x)?1:0);
sum[tree[u][t]]--;
u=tree[u][t];
}
}
ll query(int x)
{
ll ans=0;
int u=0;
for(int i=31;i>=0;--i)
{
int t=(((1LL<<i)&x)?1:0);
if(sum[tree[u][t^1]]) ans+=(1LL<<i),u=tree[u][t^1];
else u=tree[u][t];
}
return ans;
}
int main()
{
int q,t;
char s[2];
scanf("%d",&q);
insert(0);
while(q--)
{
scanf("%s %d",s,&t);
if(s[0]=='+') insert(t);
else if(s[0]=='-') update(t);
else printf("%lld\n",query(t));
}
}