fork download
  1. //Bismillahir Rahmanir Rahim
  2. //Shariful Islam(1804011)
  3. //Chittagong University of Engineering & Technology
  4. #include<bits/stdc++.h>
  5. #define pb push_back
  6. #define fin(i,arr,n) for(i=0;i<n;i++)cin>>arr[i]
  7. #define fout(i,arr,n) for(i=0;i<n;i++)cout<<arr[i]<<" "
  8. #define inf 9223372036854775807
  9. #define vi vector<ll>
  10. #define init ll n,m,a,i,b,j,k,t,x,y,z,tc,u,v,w
  11. #define f(i,n) for(i=0;i<n;i++)
  12. #define mem(a,x) memset(a,x,sizeof(a))
  13. #define sortt(v) sort(v.begin(),v.end())
  14. #define sitr(itr,st) for(itr=st.begin();itr!=st.end();itr++)
  15. #define pr pair<ll,ll>
  16. #define pi acos(-1.00)
  17. #define mod 1000000007
  18. using namespace std;
  19. typedef long long ll;
  20. struct node
  21. {
  22. bool endmark;
  23. node* next[3];
  24. node()
  25. {
  26. endmark=0;
  27. ll i;
  28. f(i,3)
  29. next[i]=NULL;
  30. }
  31. }*root;
  32.  
  33. void insert(string str)
  34. {
  35. ll sz=str.size();
  36. node* curr=root;
  37. ll i;
  38. f(i,sz)
  39. {
  40. ll id=str[i]-'0';
  41. if(curr->next[id]==NULL)
  42. curr->next[id]=new node();
  43. curr=curr->next[id];
  44.  
  45.  
  46. }
  47. curr->endmark=1;
  48.  
  49. }
  50. ll query(string str)
  51. {
  52. ll sz=str.size();
  53. node* curr=root;
  54. string tt="";
  55. ll i;
  56. f(i,sz)
  57. {
  58. ll id=str[i]-'0';
  59. if(curr->next[!id])
  60. tt+=char('0'+!id),curr=curr->next[!id];
  61. else if(curr->next[id])
  62. {
  63. tt+=char('0'+id),curr=curr->next[id];
  64. }
  65. else tt+=str[i];
  66. }
  67. bitset<40>bit(tt);
  68. return bit.to_ulong();
  69. }
  70. string binary(ll n)
  71. {
  72. ll u;
  73. string tt="";
  74. while(n)
  75. {
  76. u=n%2;
  77. if(u==0)
  78. tt="0"+tt;
  79. else tt="1"+tt;
  80. n/=2;
  81. }
  82. ll sz=tt.size();
  83. for(ll i=0;i<40-sz;i++)
  84. tt="0"+tt;
  85. return tt;
  86. }
  87. int main()
  88. { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  89. //freopen("read.txt","r",stdin);
  90. //freopen("write.txt","w",stdout);
  91. init;
  92. root=new node();
  93. ll arr[100005],pre1[100005],pre2[100005],ans=0;
  94. //cout<<binary(12)<<endl;
  95. cin>>n;
  96. f(i,n)
  97. {
  98. cin>>arr[i];
  99. if(i==0)
  100. pre1[i]=arr[i];
  101. else pre1[i]=pre1[i-1]^arr[i];
  102. ans=max(ans,pre1[i]);
  103.  
  104. }
  105. for(i=n-1;i>=0;i--)
  106. {
  107. if(i==n-1)
  108. pre2[i]=arr[i];
  109. else pre2[i]=pre2[i+1]^arr[i];
  110. ans=max(ans,pre2[i]);
  111. }
  112. for(i=n-2;i>=0;i--)
  113. {
  114. insert(binary(pre2[i+1]));
  115. ans=max(ans,pre1[i]^query(binary(pre1[i])));
  116. }
  117. cout<<ans<<endl;
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124. }
  125.  
  126.  
  127.  
  128.  
Success #stdin #stdout 0s 4580KB
stdin
4
1 2 4 12
stdout
15