数据结构基础

 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 }

 

你可能感兴趣的:(数据结构)