Pagini recente » Cod sursa (job #2854769) | Cod sursa (job #1290330) | Cod sursa (job #484945) | Cod sursa (job #2851421) | Cod sursa (job #581298)
Cod sursa(job #581298)
#include <stdio.h>
int n,a,b,i,x[100001],A,max;
struct Trie
{
int poz;
Trie *fiu[2];
Trie()
{
poz=0;
fiu[0]=fiu[1]=0;
}
};
Trie *t=new Trie;
int caut(Trie *nod,int val,int bit)
{
Trie *R=nod;
while (bit!=-1)
{
int x=((val&(1<<bit))>>bit);
if (R->fiu[x^1]) R=R->fiu[x^1];
else R=R->fiu[x];
bit--;
}
if (max<x[R->poz]^val)
{
max=x[R->poz]^val;
a=(R->poz)+1;
b=i;
}
return 0;
}
int ins(Trie *nod,int val,int bit)
{
if (bit==-1)
{
nod->poz=i;
return 0;
}
int x=(((1<<bit)&val)>>bit);
if (nod->fiu[x]==0) nod->fiu[x]=new Trie;
bit--;
ins(nod->fiu[x],val,bit);
}
int main(void)
{
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
scanf("%d",&n);
ins(t,0,24);
for (i=1;i<=n;i++)
{
scanf("%d",&A);
x[i]=x[i-1]^A;
caut(t,x[i],24);
ins(t,x[i],24);
}
printf("%d %d %d\n",max,a,b);
return 0;
}