Pagini recente » Cod sursa (job #2845165) | Cod sursa (job #1197852) | Cod sursa (job #2553285) | Cod sursa (job #1727089) | Cod sursa (job #2811506)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
int n;
int a[100005];
struct Trie
{
int pos;
Trie *leg[2];
Trie(int _pos)
{
pos=_pos;
leg[0]=NULL;
leg[1]=NULL;
}
};
Trie *T;
void Add(int x,int i)
{
Trie *p=T;
for(int bit=20; bit>=0; bit--)
{
int b=(x>>bit)&1;
if(p->leg[b]==NULL)
p->leg[b]=new Trie(i);
else
p->leg[b]->pos=i;
p=p->leg[b];
}
}
pair <int,int> f(int x)
{
Trie *p=T;
int nr=0;
for(int bit=20; bit>=0; bit--)
{
int b=(x>>bit)&1;
if(p->leg[b^1])
{
p=p->leg[b^1];
nr+=(1<<bit);
}
else
p=p->leg[b];
}
return make_pair(nr,p->pos);
}
int main()
{
fin>>n;
int i;
for(i=1; i<=n; i++)
fin>>a[i];
T=new Trie(-1);
Add(0,0);
int ans=0,l,r,sum=0;
for(i=1; i<=n; i++)
{
sum^=a[i];
Add(sum,i);
pair <int,int> aux=f(sum);
if(aux.first>ans)
{
ans=aux.first;
l=aux.second+1;
r=i;
}
}
fout<<ans<<" "<<l<<" "<<r<<"\n";
return 0;
}