数据结构基础

 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 }

 

posted @ 2013-11-19 14:43  芷水  阅读(163)  评论(0编辑  收藏  举报