Pagini recente » Cod sursa (job #1813432) | Cod sursa (job #1017082) | Cod sursa (job #3172534) | Cod sursa (job #2530456) | Cod sursa (job #996042)
Cod sursa(job #996042)
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define maxn 100005
#define maxb 20
using namespace std;
int n,sol,s,e;
int solc,sc;
int sum[maxn];
struct trie
{
trie *son[2];
int pos;
trie() {son[0]=son[1]=NULL; pos=0;}
} *r;
void add(int nr,int inde)
{
trie *node=r;
int ind;
for(int i=maxb;i>=0;i--)
{
ind=((nr>>i)&1);
if(node->son[ind]==NULL) node->son[ind]=new trie();
node=node->son[ind];
}
node->pos=inde;
}
int search(int nr)
{
trie *node=r;
int ind;
for(int i=maxb;i>=0;i--)
{
ind=((nr>>i)&1);
if(node->son[!ind]!=NULL) node=node->son[!ind];
else node=node->son[ind];
}
return node->pos;
}
void read()
{
int a;
r=new trie();
scanf("%d",&n);
add(0,0);
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
sum[i]=(sum[i-1]^a);
sc=search(sum[i]);
solc=(sum[i]^sum[sc]);
if(solc>sol) sol=solc,s=sc+1,e=i;
add(sum[i],i);
}
}
int main()
{
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
read();
printf("%d %d %d",sol,s,e);
fclose(stdin);
fclose(stdout);
return 0;
}