数据结构基础
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 using namespace std; 6 7 int tom,root,wi; 8 typedef struct node 9 { 10 int a[2]; 11 int i; 12 int num; 13 }Tril; 14 Tril f[100003<<5]; 15 16 void insert(int x,int rt,int wz) 17 { 18 int i,k; 19 for(i=21;i>=0;i--) 20 { 21 k=( (1<<i)&x )? 1:0; 22 if(f[rt].a[k]!=-1) 23 f[rt].a[k]=root++; 24 rt=f[rt].a[k]; 25 } 26 f[rt].i=wz; 27 f[rt].num=x; 28 } 29 void query(int x,int rt,int wz) 30 { 31 int i,k,cur; 32 for(i=21;i>=0;i--) 33 { 34 k=( (1<<i)&x )? 1:0; 35 if(f[rt].a[k^1]!=-1) 36 rt=f[rt].a[k^1]; 37 else rt=f[rt].a[k]; 38 } 39 cur=f[rt].num; 40 if( (cur^x)>tom ) 41 { 42 tom=cur^x; 43 wi=i; 44 } 45 } 46 47 int main() 48 { 49 int T,n; 50 int i,hxl,x; 51 scanf("%d",&T); 52 while(T--) 53 { 54 scanf("%d",&n); 55 hxl=0; 56 tom=0; 57 root=1; 58 memset(f,-1,sizeof(Tril)*((n<<5)+1)); 59 for(i=1;i<=n;i++) 60 { 61 scanf("%d",&x); 62 hxl=hxl^x; 63 query(hxl,1,i); 64 insert(hxl,1,i); 65 } 66 printf("%d\n",tom); 67 } 68 return 0; 69 }