Pagini recente » Cod sursa (job #2486304) | Cod sursa (job #3128260) | Cod sursa (job #710444) | Cod sursa (job #2415119) | Cod sursa (job #2740283)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
int n,s[200005],ans,l,r,f[3000005];
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);
}
if(n==1)
{
fout<<s[1]<<" 1 1";
return 0;
}
memset(f,-1,sizeof(f));
f[0]=0;
//fout<<query(1,0,(1<<21),3,120)<<'\n';
for(int i=1;i<=n;i++)
{
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;
}
}
if(l==0&&r==0)
{
fout<<0<<" "<<1<<" "<<1;
return 0;
}
fout<<ans<<" "<<l<<" "<<r;
return 0;
}