Pagini recente » Cod sursa (job #40513) | Cod sursa (job #1341540) | Cod sursa (job #617829) | Cod sursa (job #2030833) | Cod sursa (job #886544)
Cod sursa(job #886544)
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int n,solx,soly,i,x[100101],sol=-1;
struct Trie
{
Trie *fiu[2];
int poz;
Trie()
{
fiu[0]=fiu[1]=0;
poz=0;
}
};
Trie *t=new Trie;
void ins(Trie *R,int val,int bit)
{
if (bit==-1)
{
R->poz=i;
return ;
}
int x=(((1<<bit)&val)>>bit);
if (R->fiu[x]==0) R->fiu[x]=new Trie;
bit--;
ins(R->fiu[x],val,bit);
}
void caut(int val,int bit)
{
Trie *R=t;
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-=1;
}
if (sol<(val^x[R->poz]))
{
sol=val^x[R->poz];
solx=(R->poz)+1;
soly=i;
}
}
int main(void)
{
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
scanf("%d",&n);
ins(t,0,24);
int A;
for (i=1;i<=n;i++)
{
scanf("%d",&A);
x[i]=x[i-1]^A;
caut(x[i],24);
ins(t,x[i],24);
}
printf("%d %d %d\n",sol,solx,soly);
return 0;
}