Pagini recente » Cod sursa (job #1396019) | Cod sursa (job #2037268) | Cod sursa (job #133377) | Cod sursa (job #1490659) | Cod sursa (job #1661146)
#include<iostream>
#include<fstream>
#define DX 200010
#define BIT 21
using namespace std;
fstream fin("xormax.in",ios::in),fout("xormax.out",ios::out);
int x[DX];
struct trie
{
int cine;
trie *nxt[2];
trie()
{
cine=0;
nxt[0]=nxt[1]=0;
}
};
void insert(trie* nod,int put,int nr,int deacuie)
{
bool bit=nr&(1<<put);
if(put==-1)
{
nod->cine=deacuie;
return ;
}
if(nod->nxt[bit]==NULL) nod->nxt[bit]=new trie;
insert(nod->nxt[bit],put-1,nr,deacuie);
}
int search(trie* nod,int put,int nr)
{
bool bit=nr&(1<<put);
if(put==-1) return nod->cine;
if(nod->nxt[!bit]==NULL)
return search(nod->nxt[bit],put-1,nr);
else
return search(nod->nxt[!bit],put-1,nr);
}
int main()
{
int i,j,n,a,poz,b,l,start=1,stop=1,maxim=0;
trie* t=new trie;
fin>>n;
insert(t,BIT,0,0);
for(i=1;i<=n;i++)
{
fin>>a;
x[i]=x[i-1]^a;
poz=search(t,BIT,x[i]);
b=x[i]^x[poz];
l=i-poz+1;
if(maxim<b || (maxim==b && l<stop-start+1))
{
maxim=b;
stop=i;
start=poz+1;
}
insert(t,BIT,x[i],i);
}
fout<<maxim<<" "<<start<<" "<<stop<<"\n";
}