Pagini recente » Cod sursa (job #1005605) | Cod sursa (job #2723457) | Cod sursa (job #718280) | Cod sursa (job #1964986) | Cod sursa (job #2891400)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("xormax.in");
ofstream cout("xormax.out");
int n;
struct trie {
int cnt, nrfii;
trie* bit[2];
trie() {
cnt = 0;
nrfii = 0;
bit[0] = NULL;
bit[1] = NULL;
}
};
trie* T = new trie;
int nr, indice;
void add(trie* act, int ind) {
if (ind == -1) {
act->cnt = indice;
return;
}
int bit = (1 << ind);
if ((nr & bit) == 0) {
if (act->bit[0] == NULL) {
act->bit[0] = new trie;
}
add(act->bit[0], ind - 1);
}
else {
if (act->bit[1] == NULL) {
act->bit[1] = new trie;
}
add(act->bit[1], ind - 1);
}
}
int ans, ansi, cmp, st, fin, alt, dif;
void prc(trie* act, int ind) {
if (ind == -1) {
alt = act->cnt;
return;
}
int bit = (1 << ind);
if ((cmp & bit) != 0) {
dif = 1;
}
else {
dif = 0;
}
if (act->bit[1 - dif] != NULL) {
ansi = (ansi | bit);
prc(act->bit[1 - dif], ind - 1);
}
else if (act->bit[dif] != NULL) {
prc(act->bit[dif], ind - 1);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
int x;
nr = 0;
indice = 0;
add(T, 20);
int sp = 0;
for (int i = 1; i <= n; i++) {
cin >> x;
sp = sp ^ x;
ansi = 0;
cmp = sp;
prc(T, 20);
if (ans < ansi) {
ans = ansi;
st = alt + 1;
fin = i;
}
indice = i;
nr = sp;
add(T, 20);
}
cout << ans << ' ' << st << ' ' << fin;
}