Pagini recente » Cod sursa (job #750980) | Cod sursa (job #2457018) | Cod sursa (job #2181683) | Cod sursa (job #1587348) | Cod sursa (job #360638)
Cod sursa(job #360638)
#include<fstream>
using namespace std;
const char iname[]="xormax.in";
const char oname[]="xormax.out";
const int maxn=100005;
ifstream f(iname);
ofstream g(oname);
int a[maxn],i,j,n,x[maxn],maxt,u,v;
struct trie
{
trie *l;
trie *r;
int p;
trie()
{
l=r=0;
}
} *root= new trie;
void insert(trie *k,int v,int p)
{
int step=(1<<22);
trie *i=k;
for(;step;step>>=1)
{
i->p=p;
if(v&step)
{
if(!i->l)
i->l=new trie;
i=i->l;
continue;
}
if(!(i->r))
i->r=new trie;
i=i->r;
}
i->p=p;
}
int getp(trie *k,int v)
{
int step=(1<<22);
trie *i=k;
for(;step;step>>=1)
{
if((v&step&&i->r)||!i->l)
{
i=i->r;
continue;
}
i=i->l;
}
return i->p;
}
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>a[i],x[i]=x[i-1]^a[i];
insert(root,0,0);
maxt=-0x3f3f3f3f;
for(i=1;i<=n;++i)
{
j=getp(root,x[i]);
if((x[i]^x[j])>maxt)
maxt=x[i]^x[j],u=j+1,v=i;
insert(root,x[i],i);
}
g<<maxt<<" "<<u<<" "<<v<<"\n";
f.close();
g.close();
return 0;
}