为什么开了 O2 RE #5,关了O2 WA #5? 为什么???
#include<bits/stdc++.h>
using namespace std;
#define k 31
int n,cnt;
unsigned ans;
int t[100010][2];
int b[1000010][33];
inline void biuld(int d,int x){
int p=0;
bool *c=new bool[50];
if(x<0)x=-x,c[k]=1;
for(int i=0;i<=k;i++){
bool y=(x&(1<<i))>>i;
c[i]=y;
}
for(int i=k;i>=0;i--){
b[d][i]=c[i];
if(!t[p][b[d][i]])t[p][b[d][i]]=++cnt;
p=t[p][b[d][i]];
}
delete []c;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int a;
cin>>a;
biuld(i,a);
}
for(int i=1;i<=n;i++){
int root=0;
unsigned sum=0;
for(int j=k;j>=0;j--){
if(!b[i][j]){
if(t[root][1])sum+=(1<<j),root=t[root][1];
else root=t[root][0];
}else{
if(t[root][0])sum+=(1<<j),root=t[root][0];
else root=t[root][1];
}
}
ans=max(ans,sum);
}
cout<<ans;
return 0;
}