Pagini recente » Cod sursa (job #1186361) | Cod sursa (job #1634917) | Cod sursa (job #1285499) | Cod sursa (job #1419396) | Cod sursa (job #1081005)
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define L 20
struct T{
T*c[2];int l;
T(int _l){l=_l;c[0]=c[1]=0;}
}*root;
inline void push(int i,int n){
T*t=root;
int b=21;
while(b--){
bool d=(i&(1<<b));
if(!(t->c[d])) t->c[d]=new T(n);
t=t->c[d];
}
t->l=n;
}
inline int get(int i,int *m){
int g=0;
T*t=root;
int b=21;
while(b--){
bool d=(i&(1<<b));
if(t->c[!d]) t=t->c[!d],g+=(1<<b);
else t=t->c[d];
}
*m=t->l;
return g;
}
int main(){
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
root=new T(0);
push(0,-1);
int n,x,s=0;
int mv=0,mb=0,me=0;
scanf("%i",&n);
fr(i,0,n){
scanf("%i",&x);
s^=x;
int v,b;
v=get(s,&b);
if(v>mv) mv=v,me=i,mb=b;
push(s,i);
}
printf("%i %i %i",mv,mb+2,me+1);
return 0;
}