Pagini recente » Cod sursa (job #2005394) | Cod sursa (job #143871) | Cod sursa (job #1386772) | Cod sursa (job #505838) | Cod sursa (job #2318843)
#include <bits/stdc++.h>
using namespace std;
ifstream f("xormax.in");
ofstream g("xormax.out");
int n,i,x,last,k=1,ke[1000010],son[1000010][2];
bitset<30> a;
pair<int,pair<int,int> > ans;
void upd(int val,int exx)
{
a.reset();
int cnt=-1;
while(val)
{
a[++cnt]=val&1;
val>>=1;
}
int poz=1;
for(int i=21;i>=0;i--)
{
if(!son[poz][a[i]])
son[poz][a[i]]=++k;
poz=son[poz][a[i]];
}
ke[poz]=exx;
}
pair<int,int> getmax(int val)
{
int poz=1,ret=val;
for(int i=21;i>=0;i--)
{
if(val&(1<<i))
if(son[poz][0])
poz=son[poz][0];
else
poz=son[poz][1],ret^=(1<<i);
else
if(son[poz][1])
poz=son[poz][1],ret^=(1<<i);
else
poz=son[poz][0];
val>>=1;
}
return {ret,ke[poz]};
}
int main()
{
f>>n;
upd(0,0);
for(i=1;i<=n;i++)
{
f>>x;last^=x;
pair<int,int> aux=getmax(last);
ans=max(ans,{aux.first,{aux.second+1,i}});
upd(last,i);
}
g<<ans.first<<' '<<ans.second.first<<' '<<ans.second.second;
return 0;
}