异或求最小值模板
#include <bits/stdc++.h>
using namespace std;
const int maxn=300005;
int n,m;
int a[maxn],b[maxn];
int ch[30*maxn][2];
int val[30*maxn];
int sz;
void insert(int num){
int u=0;
for(int i=29;i>=0;i--){
int c=((num>>i)&1);
if(!ch[u][c]){
ch[u][c]=++sz;
}
u=ch[u][c];
val[u]++;
}
}
void remove(int num)
{
int u=0;
for(int i=29;i>=0;i--)
{
int c=((num>>i)&1);
int pre = u;
u = ch[u][c];
if(--val[u]==0) ch[pre][c]=0;
}
}
int query(int num){
int p=0,v=0;
for(int i=29;i>=0;i--)
{
int c=((num>>i)&1);
if(ch[p][c])p=ch[p][c];
else
{
p=ch[p][c^1];
v+=(1<<i);
}
}
return v;
}
异或求最