Pagini recente » Cod sursa (job #2103222) | Rating Alex cristi (alexcristi89) | Cod sursa (job #222041) | Cod sursa (job #233944) | Cod sursa (job #2303206)
#include <bits/stdc++.h>
using namespace std;
const int INTSIZE = 30;
struct trie
{
int val;
trie *nxt[2];
trie()
{
val = 0;
nxt[0] = nxt[1] = 0;
}
};
void add(trie *p , int pre)
{
int i;
for(i = INTSIZE ; i >=0 ; i--)
{
bool res = (1 << i) & pre;
if(p -> nxt[res] == NULL)
p -> nxt[res] = new trie();
p = p -> nxt[res];
}
p -> val = pre;
}
int query(trie *p , int pre)
{
int i;
for(i = INTSIZE ; i >= 0; i--)
{
bool res = pre & (1 << i);
if(p -> nxt[1 - res] != NULL)
p = p -> nxt[1 - res];
else if(p -> nxt[res] != NULL)
p = p -> nxt[res];
}
return (pre ^ (p -> val));
}
const int NMAX = 1e5 + 5;
int n , i , v[NMAX] , pre, ans;
int main()
{
ifstream fin("xormax.in");
ofstream fout("xormax.out");
trie *p = new trie();
add(p , 0);
fin >> n;
for(i = 1; i <= n; i++)
{
fin >> v[i];
pre = pre ^ v[i];
add(p , pre);
ans = max(ans , query(p , pre));
}
fout << ans;
return 0;
}
///