Pagini recente » Cod sursa (job #1191621) | Cod sursa (job #2981150) | Cod sursa (job #1411123) | Cod sursa (job #1875078) | Cod sursa (job #1457483)
#include <fstream>
using namespace std;
int a[(1<<23)+5],Max,Xor,i,n,uk,v,x,start,stop;
ifstream f("xormax.in");
ofstream g("xormax.out");
inline void det(int nod,int nivel,int x)
{
if(nivel<0) return;
if(!nivel) uk=a[nod];
bool bit=(((x>>nivel)&1)>0);
int son1=(nod<<1), son2=son1+1;
if(bit)
{
if(a[son1]!=-1) det(son1,nivel-1,x);
else v=(v|(1<<nivel)), det(son2,nivel-1,x);
}
else
{
if(a[son2]!=-1) det(son2,nivel-1,x), v=(v|(1<<nivel));
else det(son1,nivel-1,x);
}
}
inline void update(int nod,int nivel,int x)
{
a[nod]=i;
if(nivel<0) return;
bool bit=(((x>>nivel)&1)>0);
int son1=(nod<<1), son2=son1+1;
if(bit) update(son2,nivel-1,x);
else update(son1,nivel-1,x);
}
int main()
{
f>>n;Max=-1;Xor=0;
for(i=0;i<=(1<<23);++i) a[i]=-1;
i=0;update(1,21,0);
for(i=1;i<=n;++i)
{
f>>x;Xor=(x^Xor);v=0;
det(1,21,Xor);
if((v^Xor)>Max) Max=(v^Xor), start=uk+1, stop=i;
update(1,21,Xor);
}
g<<Max<<" "<<start<<" "<<stop<<'\n';
return 0;
}