Pagini recente » Cod sursa (job #1654123) | Cod sursa (job #1326610) | Cod sursa (job #3202626) | Cod sursa (job #2094027) | Cod sursa (job #1162678)
#include<cstdio>
using namespace std;
#define NMAX 100001
int N , s[NMAX] , best , poz ;
struct nod
{
nod *fiu[2];
nod()
{
fiu[0] = fiu[1] = 0;
}
};
nod *rad = new nod();
void add(int n);
int query(int n);
int main()
{
freopen("xormax.in" , "r" , stdin );
freopen("xormax.out" , "w" , stdout );
add(0);
scanf("%d" , &N );
for(int i = 1 ; i<= N ; ++i)
{
scanf("%d" , &s[i]);
s[i]^=s[i-1];
int nr = query(s[i]);
if((s[i] ^ nr) > best )
{
best = (s[i] ^ nr);
poz = i;
}
add(s[i]);
}
printf("%d " , best);
for(int i = 0 ; i <= poz ; ++i )
if((s[i]^s[poz]) == best )
{
printf("%d %d\n" , i+1,poz);
break;
}
return 0;
}
void add(int n)
{
nod *q = rad;
for(int i = 20 ; i >= 0 ; i-- )
{
int val = (n&(1<<i))!= 0;
if(!(q->fiu[val]))q->fiu[val] = new nod();
q = q->fiu[val];
}
}
int query(int n)
{
int ret = 0;
nod *q = rad;
for(int i = 20 ; i >=0 ; i-- )
{
int val = ((n&(1<<i))!=0);
if(q->fiu[1-val])
{
ret = ret*2+1-val;
q = q->fiu[1-val];
}
else
{
ret = ret*2+val;
q = q->fiu[val];
}
}
return ret;
}