Pagini recente » Cod sursa (job #848870) | Cod sursa (job #639933) | Borderou de evaluare (job #1523413) | Cod sursa (job #1049934) | Cod sursa (job #3339136)
#include <fstream>
#define nmax (int)(1e6+1)
using namespace std;
ifstream cin("xormax.in");
ofstream cout("xormax.out");
int v[nmax],n,sol,ans,st,dr,p;
struct nod{
int poz;
nod* fr[2];
nod(){
poz=-1;
fr[0]=fr[1]=nullptr;
}
};
nod* root=new nod;
void add(nod* n,int val,int k,int nr){
if(k==-1){
(*n).poz=nr;
return ;
}
int bit=(val>>k)&1;
if((*n).fr[bit]==nullptr)
(*n).fr[bit]=new nod;
add((*n).fr[bit],val,k-1,nr);
}
void query(nod* n,int val,int k){
if(k==-1){
p=(*n).poz;
return ;
}
int bit=(val>>k)&1;
if((*n).fr[1-bit]!=nullptr)
query((*n).fr[1-bit],val,k-1);
else
query((*n).fr[bit],val,k-1);
}
signed main()
{
cin>>n;
add(root,0,21,0);
for(int i=1;i<=n;i++){
cin>>v[i];
v[i]^=v[i-1];
p=0;
query(root,v[i],21);
ans=v[i]^v[p];
p++;
if(ans>sol){
sol=ans;
st=p;
dr=i;
}
add(root,v[i],21,i);
}
cout<<sol<<" "<<st<<" "<<dr;
return 0;
}