Pagini recente » Cod sursa (job #2338383) | Borderou de evaluare (job #1900543) | Cod sursa (job #3737) | Cod sursa (job #2864125) | Cod sursa (job #45785)
Cod sursa(job #45785)
#include <cstdio>
using namespace std;
#define NX 100001
#define BX 3
#define left(X) ((X)<<1)
#define right(X) (((X)<<1) + 1)
int s[ NX ], res, N, start, stop;
int A[ 1<<(BX+1) + 1 ];
void baga( int key, int poz ) {
int mask, node;
for( node = 1, mask = 1 << (BX-1); mask; mask >>= 1 ) {
node = ( mask & key ) ? right(node) : left( node );
A[ node ] = poz;
}
}
int xmax( int key ) {
int mask, node;
for( node = 1, mask = 1 << (BX-1); mask > 1; mask >>= 1 )
node = ( mask & key ) ? left( node ) : right( node );
return A[ node ];
}
void cit() {
int i, j, x, val;
scanf( "%d", &N );
for( i = 1; i <= N; i++ ) {
scanf( "%d", &x );
s[i] = s[i-1] ^ x;
j = xmax( s[i] );
val = s[i] ^ s[j];
if( res < val ) {
res = val;
stop = i;
start = j+1;
}
baga( s[i], i );
}
}
void scr() {
printf( "%d %d %d\n", res, start, stop );
}
int main() {
freopen( "xormax.in", "r", stdin );
freopen( "xormax.out", "w", stdout );
cit();
scr();
return 0;
}