Pagini recente » Cod sursa (job #3207789) | Cod sursa (job #3180640) | Cod sursa (job #2803406) | Cod sursa (job #3206687) | Cod sursa (job #12232)
Cod sursa(job #12232)
#include <stdio.h>
#define Max ((1<<21)-1)
#define Dim 3000
#define cit(x) x=0; while (lin[poz]>='0'){x=10*x+lin[poz++]-'0'; \
if (poz==Dim) fread(lin, 1, Dim, stdin), poz=0; } \
poz++; if (poz==Dim) fread(lin, 1, Dim, stdin), poz=0;
int n, a[100100];
char ok[1<<21];
int main()
{
freopen("xormax.in", "r", stdin);
freopen("xormax.out", "w", stdout);
scanf("%d\n", &n); n++;
char lin[Dim+10];
fread(lin, 1, Dim, stdin);
int i, j, poz=0, pow=1;
ok[0]=1;
for (i=1; i<n; ok[a[i]]=1, ++i){
cit(j); a[i]=a[i-1]^j;
if (a[i]>pow) pow=a[i];
if (ok[Max-a[i]])
for (j=i-1; j>=0; j--)
if ((a[j]^a[i])==Max){
printf("%d %d %d\n", Max, j+1, i);
return 0;
}
}
for (i=0; i<n; i++) ok[a[i]]=0;
ok[0]=1;
while (pow & (pow+1)) pow++;
for (i=0; i<n; ok[a[i]]=1, ++i)
if (ok[pow-a[i]])
for (j=i-1; j>=0; j--)
if ((a[j]^a[i])==pow){
printf("%d %d %d\n", pow, j+1, i);
return 0;
}
int best=-1, p=0, u=0;
for (i=1; i<n; i++)
for (j=i-1; j>=0; j--)
if ((a[j]^a[i]) > best) best=(a[j]^a[i]), p=j, u=i;
printf("%d %d %d\n", best, p+1, u);
return 0;
}