Pagini recente » Cod sursa (job #842657) | Cod sursa (job #1592270) | Cod sursa (job #1270278) | Cod sursa (job #1542415) | Cod sursa (job #1590086)
#include<stdio.h>
#include<bitset>
#include<algorithm>
#include<iostream>
#include<vector>
#include<string>
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define MOD 1000000007
using namespace std;
int N,x,par;
string s,t;
int ma, lma=1, rma=1, cnt;
int l[3000100], r[3000100], ind[300100];
inline void add(int x) {
int curr = 0; //root
for(int i=20;i>=0;--i) {
if(s[i] == '0') {
if(!l[curr]) {
l[curr] = ++cnt;
}
curr = l[curr];
} else {
if(!r[curr]) {
r[curr] = ++cnt;
}
curr = r[curr];
}
}
ind[curr] = x; //always latest
}
inline void compute(int x) {
int curr = 0, pw = (1<<20);
int ret = 0;
for(int i=20;i>=0;--i) {
if(s[i] == '1') {
if(!l[curr]) {
curr = r[curr];
} else {
curr = l[curr];
ret += pw;
}
} else {
if(!r[curr]) {
curr = l[curr];
} else {
curr = r[curr];
ret += pw;
}
}
pw /= 2;
}
if(ret > ma) {
ma = ret;
lma = ind[curr]+1;
rma = x;
}
}
int main() {
freopen("xormax.in","r",stdin);
freopen("xormax.out","w",stdout);
//freopen("input.in","r",stdin);
for(int i=0;i<21;++i) {
t.pb('0');
}
scanf("%d",&N);
for(int i=0;i<=N;++i) {
s = t;
if(i) {
scanf("%d",&x);
par = (par ^ x);
x = par;
for(int j=0;j<21;++j) {
if(x%2) s[j] = '1';
x /= 2;
}
compute(i);
}
add(i);
}
printf("%d %d %d\n",ma,lma,rma);
return 0;
}