Pagini recente » Cod sursa (job #511066) | Cod sursa (job #1489292) | Cod sursa (job #1684139) | Cod sursa (job #705987) | Cod sursa (job #2921887)
#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()
{
this->val=-1;
this->poz=-1;
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=(((1<<acm)&s)!=0);
c^=1;
///valoarea inversata de pe bitul acm+1
if(t->a[c]==nullptr)
{
return caut(t->a[c^1],s,acm-1);
}
else
{
return caut(t->a[c],s,acm-1);
}
}
int start=19;
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=((1<<acm)&s!=0);
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");
cin.tie(0);
nod*S=new nod();
int n;
cin>>n;
vector<int>a(n+1,0);
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
insert(S,0,0,start);
int x=0,sol=-1,g,h;
for(int i=1;i<=n;i++)
{
x^=a[i];
pair<int,int>rez=caut(S,x,start);
insert(S,x,i,start);
if(x^rez.first>sol)
{
sol=x^rez.first;
g=rez.second+1;
h=i;
}
}
cout<<sol<<' '<<g<<' '<<h;
delete S;
}