Pagini recente » Cod sursa (job #1687015) | Cod sursa (job #2888235) | Cod sursa (job #2125074) | Cod sursa (job #1411868) | Cod sursa (job #2082712)
#include <iostream>
#include <cstdio>
#define N 100005
using namespace std;
int n, a[N], maxi=0, st, sf;
struct nod
{
int nr, fii;
nod *cif[5];
nod()
{
for(int i=0;i<=1;i++)
cif[i]=NULL;
nr=0;
fii=0;
}
};
void adaug(nod *v, int n, int poz, int nmax)
{
if(nmax<0)
{
v->nr=poz;
return;
}
bool nc=(1<<nmax)&n;
if(v->cif[nc]==NULL)
{
v->cif[nc]=new nod();
v->fii++;
}
adaug(v->cif[nc], n, poz, nmax-1);
}
int cautare(nod *v, int nmax, int n)
{
if(nmax<0)
return v->nr;
bool nc=(1<<nmax)&n;
if(v->cif[!nc]==NULL)
return cautare(v->cif[nc], nmax-1, n);
return cautare(v->cif[!nc], nmax-1, n);
}
void citire()
{
scanf("%d\n", &n);
nod *r=new nod();
adaug(r, 0, 0, 21);
for(int i=1;i<=n;i++)
{
scanf("%d ", &a[i]);
a[i]=a[i-1]^a[i];
int poz=cautare(r, 21, a[i]);
if((a[poz]^a[i])>maxi)
{
maxi=a[poz]^a[i];
st=poz+1;
sf=i;
}
adaug(r, a[i], i, 21);
}
}
int main()
{
freopen("xormax.in", "r", stdin);
freopen("xormax.out", "w", stdout);
citire();
printf("%d %d %d", maxi, st, sf);
return 0;
}