Pagini recente » Cod sursa (job #743233) | Cod sursa (job #1706517) | Cod sursa (job #1025649) | Cod sursa (job #1010566) | Cod sursa (job #2162548)
#include<bits/stdc++.h>
using namespace std;
ifstream f("xormax.in");
ofstream g("xormax.out");
int n,v[100002];
int XoR[100002];
struct trie
{
int lpos;
trie *f[2];
trie()
{
lpos=0;
memset(f, 0, sizeof(f));
}
};
trie *rad=new trie;
trie *t;
int maxx,st,dr;
int main()
{
f>>n;
for(int i=1;i<=n;++i)
{
f>>v[i];
XoR[i]=XoR[i-1]^v[i];
}
for(int i=0;i<n;++i)
{
int nr=XoR[i];
t = rad;
for(int j=22;j>=0;--j)
{
int q=((nr&(1<<j))>0);
if(t->f[q]==NULL)
t->f[q]=new trie;
t=t->f[q];
}
t->lpos=i;
int vall=0;
nr=XoR[i+1];
t = rad;
for(int j=22;j>=0;--j)
{
int q=((nr&(1<<j))>0);
q^=1;
vall^=(1<<j);
if(t->f[q]==NULL)
q^=1,vall^=(1<<j);
t=t->f[q];
}
if(vall>maxx)
maxx=vall,st=t->lpos+1,dr=i+1;
}
g<<maxx<<" "<<st<<" "<<dr<<'\n';
return 0;
}