Pagini recente » Cod sursa (job #2655296) | Cod sursa (job #2608448) | Cod sursa (job #1393019) | Cod sursa (job #1023478) | Cod sursa (job #2740279)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
int n,s[100005],ans,l,r,f[2000005];
const int inf=1e9;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
s[i]=(s[i-1]^x);
}
memset(f,-1,sizeof(f));
f[0]=1;
//fout<<query(1,0,(1<<21),3,120)<<'\n';
for(int i=1;i<=n;i++)
{
bool ok=0;
if(i==n)
ok=1;
int nr=0;
for(int bit=20;bit>=0;bit--)
{
if((s[i]>>bit)&1)
{
int bestpoz=f[nr];
if(bestpoz!=-1)
{
int val=(s[i]^s[bestpoz]);
if(val>ans)
{
ans=val;
l=bestpoz+1;
r=i;
}
}
else
nr+=(1<<bit);
}
else
{
int bestpoz=f[nr+(1<<bit)];
if(bestpoz!=-1)
{
int val=(s[i]^s[bestpoz]);
if(val>ans)
{
ans=val;
l=bestpoz+1;
r=i;
}
nr+=(1<<bit);
}
}
}
int x=0;
for(int bit=20;bit>=0;bit--)
{
if((s[i]>>bit)&1)
x+=(1<<bit);
f[x]=i;
}
}
fout<<ans<<" "<<l<<" "<<r;
return 0;
}