题目链接:1295 XOR key
模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=50009;
int tot;
int Son[maxn*30][2];
int sum[maxn*60];
void insert(int p,int q,int x){
for(int i=31;i>=0;--i){
int id=x>>i&1;
if(q) Son[p][id^1]=Son[q][id^1];
Son[p][id]=++tot;
sum[p]=sum[q]+1;
p=Son[p][id];
q=Son[q][id];
}
sum[p]=sum[q]+1;
}
int ask(int p,int q,int x){
int res=0;
for(int i=31;i>=0;--i){
int id=x>>i&1;
if(sum[Son[p][id^1]]-sum[Son[q][id^1]]>0) res+=1<<i,p=Son[p][id^1],q=Son[q][id^1];
else p=Son[p][id],q=Son[q][id];
}
return res;
}
int root[maxn];
int main(){
int n,q,x,l,r;
scanf("%d%d",&n,&q);
for(int i=1,x;i<=n;++i){
scanf("%d",&x);
root[i]=++tot;
insert(root[i],root[i-1],x);
}
while(q--){
scanf("%d%d%d",&x,&l,&r);
++l,++r;
printf("%d\n",ask(root[r],root[l-1],x));
}
return 0;
}