Pagini recente » Cod sursa (job #2371709) | Cod sursa (job #2231108) | Cod sursa (job #1080177) | Cod sursa (job #978332) | Cod sursa (job #149884)
Cod sursa(job #149884)
#include<stdio.h>
long i,j,n,a,x[100001],zero,b,bit,
max,start,stop,maxc,startc,stopc,poz0,poz1,poz,arb[4200000];
int main()
{
FILE *f=fopen("xormax.in","r"),*g=fopen("xormax.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++){fscanf(f,"%ld",&a);x[i]=x[i-1]^a;}
zero=(1<<21);max=x[1];start=1;stop=1;
for(i=1;i<=n;i++)
{ maxc=x[i];startc=i;stopc=i;
poz=1;
for(b=20;b>=0;b--)
{ bit=(1<<b)&x[i];
if(bit)
{ poz1=poz<<1;
if(!arb[poz1])poz1++;
poz=poz1;
}
else
{ poz1=(poz<<1)|1;
if(!arb[poz1])poz1--;
poz=poz1;
}
}
j=arb[poz];if(x[i]!=x[j]){maxc=x[i]^x[j];startc=j;}
if(maxc>max){start=startc;stop=stopc;max=maxc;}
poz=zero+x[i];
do{arb[poz]=i;poz/=2;}while(poz);
}
if(start<stop)start++;
fprintf(g,"%ld %ld %ld\n",max,start,stop);
fcloseall();
return 0;
}