Pagini recente » Cod sursa (job #499415) | Cod sursa (job #1581868) | Monitorul de evaluare | Cod sursa (job #1609171) | Cod sursa (job #1747106)
#include <iostream>
#include<fstream>
using namespace std;
int arb[(1<<22)+5],i,xorsum,xormax,x,ap[25],start,stop,n,j;
void ins(int lev,int nod)
{
arb[nod]=i;
if(lev==0) return;
ins(lev-1,2*nod+ap[lev-1]);
}
void query(int lev,int nod)
{
if(lev==0)
{
if(xorsum>xormax) {xormax=xorsum;start=arb[nod]+1;stop=i;}
return;
}
if(arb[2*nod+(1^ap[lev-1])]!=0) {xorsum+=(1<<(lev-1));query(lev-1,2*nod+(1^ap[lev-1]));}
else query(lev-1,2*nod+ap[lev-1]);
}
int main()
{
ifstream f("xormax.in");
ofstream g("xormax.out");
f>>n;
xormax=-1;
for(i=1;i<=n;i++)
{
f>>x;
for(j=0;j<=20;j++)
{
if(x&(1<<j)) ap[j]++;
ap[j]%=2;
}
xorsum=0;
ins(21,1);
query(21,1);
}
g<<xormax<<' '<<start<<' '<<stop;
return 0;
}