Pagini recente » Cod sursa (job #2490452) | Cod sursa (job #688790) | Cod sursa (job #3234644) | Cod sursa (job #622475) | Cod sursa (job #2921903)
#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;
set<int>mp;
for(int i=n;i>=1;i--)
{
if(!mp.count(sor[i]))
{
assert(caut(S,sor[i],20).second==i);
}
mp.insert(sor[i]);
}
delete S;
}