Pagini recente » Cod sursa (job #2716133) | Cod sursa (job #1503525) | Cod sursa (job #3194551) | Cod sursa (job #2431709) | Cod sursa (job #3187316)
#include <fstream>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
struct trie{
struct nod{
nod* ch[2]={NULL,NULL};
int ind=0;
}root;
void insert(int val,int ind)
{
nod* a = &root;
for(int i = 22;i>=0;i--)
{
if(!a->ch[(val>>i)&1])
a->ch[(val>>i)&1] = new nod;
a=a->ch[(val>>i)&1];
}
a->ind=ind;
}
pair<int,int> query(int val)
{
nod* a= &root;
int value=0;
for(int i=22;i>=0;i--)
{
int inv = 1-((val>>i)&1);
if(a->ch[inv])
a=a->ch[inv],value+=((1<<i)*inv);
else
a=a->ch[1-inv],value+=((1<<i)*(1-inv));
}
return pair<int,int>{value,a->ind};
}
}t;
int n;
int lx;
int solmax;
int solst;
int soldr;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
lx^=x;
if(i!=1)
{
pair<int,int> s = t.query(lx);
s.first^=lx;
if(s.first > solmax)
solmax=s.first,solst=s.second+1,soldr=i;
}
t.insert(lx,i);
}
fout<<solmax<<' '<<solst<<' '<<soldr;
}