int n, m; int a[N]; int idx=0; int ch[N*31][2]; voidinsert(int x){ int p=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; if(!ch[p][u])ch[p][u]=++idx; p=ch[p][u]; } } intquery(int x){ int p=0;int ans=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; if(ch[p][!u]){ p=ch[p][!u]; ans+=1<<i; } else p=ch[p][u]; } return ans; } voidsolve(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; insert(a[i]); } int ans=0; for(int i=1;i<=n;i++){ ans=max(ans,query(a[i])); } cout<<ans<<endl; }
int n, m; int a[N]; int idx=0; int ch[N*31][2]; voidinsert(int x){ int p=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; if(!ch[p][u])ch[p][u]=++idx; p=ch[p][u]; } } intquery(int x){ int p=0;int ans=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; if(ch[p][!u]){ p=ch[p][!u]; ans+=1<<i; } else p=ch[p][u]; } return ans; } structedge{int v,w;}; int d[N]; vector<edge>e[N]; voiddfs(int u,int fa){
int n, m; int a[N]; int idx=0; int ch[N*31][2]; bool st[N]; int cnt[N*31]; voidinsert(int x){ int p=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; if(!ch[p][u])ch[p][u]=++idx; p=ch[p][u];cnt[p]++; } } //里面一个数都没有的时候就是答案找到的时候 intquery(int x){ int p=0;int ans=0; for(int i=30;i>=0;i--){ int u=(x>>i)&1; int nx=ch[p][u]; if(cnt[nx]<(1<<i)){ p=ch[p][u]; if(p==0)return ans; } else { p=ch[p][!u]; ans|=(1<<i); if(p==0)return ans; } } return ans; } voidsolve(){ cin>>n;cin>>m; for(int i=1;i<=n;i++){ cin>>a[i]; if(st[a[i]]==0){ st[a[i]]=true; insert(a[i]); } } int sum=0; for(int i=1;i<=m;i++){ int x;cin>>x; sum^=x; int ans=query(sum); cout<<ans<<endl; } }