Pagini recente » Cod sursa (job #2294777) | Cod sursa (job #2663633) | Cod sursa (job #1173700) | Cod sursa (job #2755402) | Cod sursa (job #2921904)
#include <fstream>
#import <algorithm>
#import <vector>
#import <map>
#import <set>
#import <deque>
#import <queue>
#import <cassert>
//#import <cmath>
#import <cstring>
#import <cctype>
#import <cstdlib>
#import <stack>
using namespace std;
struct nod
{
int poz,val;
nod*a[2];
nod()
{
a[0]=a[1]=nullptr;
}
};
pair<int,int>caut(nod*&t,const int&s,const int& acm)
{
if(acm==-1)
{
return make_pair(t->val,t->poz);
}
int c=((s>>acm)&1);
if(t->a[c]==nullptr)
{
c^=1;
}
return caut(t->a[c],s,acm-1);
}
void insert(nod*&t,const int&s,const int&poz,const int& acm)
{
if(acm==-1)
{
t->poz=poz;
t->val=s;
return;
}
int c=((s>>acm)&1);
if(t->a[c]==nullptr)
{
t->a[c]=new nod();
}
insert(t->a[c],s,poz,acm-1);
}
main()
{
ifstream cin("xormax.in");
ofstream cout("xormax.out");
nod*S=new nod();
int n;
cin>>n;
vector<int>a(n+1,0),sor(n+1,0);
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
insert(S,0,0,20);
int x=0,sol=-1,g,h;
const int inv=(1<<21)-1;
for(int i=1;i<=n;i++)
{
x^=a[i];
sor[i]=x;
pair<int,int>rez=caut(S,inv^x,20);
insert(S,x,i,20);
if(x^rez.first>sol)
{
sol=x^rez.first;
g=rez.second+1;
h=i;
}
}
cout<<sol<<' '<<g<<' '<<h;
assert(sor[h]^sor[g]==sol)
delete S;
}