Pagini recente » Cod sursa (job #2723766) | Cod sursa (job #1723794) | Cod sursa (job #1079877) | Cod sursa (job #1729290) | Cod sursa (job #1777007)
#include <cstdio>
#include <vector>
using namespace std;
struct trie
{
int poz;
int v[2];
trie()
{
poz=v[0]=v[1]=0;
}
};
vector<trie> arb;
int v[100010];
void trie_add(int x,int poz)
{
int nod=0,p;
for(int i=21;i>=0;i--)
{
if(x&(1<<i)) p=1;
else p=0;
if(arb[nod].v[p]==0)
{
arb.push_back(trie());
arb[nod].v[p]=arb.size()-1;
}
nod=arb[nod].v[p];
}
arb[nod].poz=poz;
}
int trie_find(int x)
{
int nod=0,p;
for(int i=21;i>=0;i--)
{
if(x&(1<<i)) p=0;
else p=1;
if(arb[nod].v[p]==0) if(p==0) p=1;
else p=0;
nod=arb[nod].v[p];
}
return arb[nod].poz;
}
int main()
{
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
int n,maxx,i1=1,j1=1,poz;
scanf("%d",&n);
scanf("%d",&v[1]);
maxx=v[1];
arb.push_back(trie());
trie_add(v[1],1);
for(int i=2;i<=n;i++)
{
scanf("%d",&v[i]);
v[i]=v[i-1]^v[i];
poz=trie_find(v[i]);
if(v[i]^v[poz]>maxx) {maxx=v[i]^v[poz];i1=poz+1;j1=i;}
trie_add(v[i],i);
}
printf("%d %d %d",maxx,i1,j1);
return 0;
}