Pagini recente » Cod sursa (job #963069) | Cod sursa (job #2435010) | Cod sursa (job #652836) | Cod sursa (job #1388600) | Cod sursa (job #2400678)
#include <bits/stdc++.h>
#define MAX_BIT 21
using namespace std;
struct trie {
trie * t[2];
int index;
trie () {
t[0] = t[1] = NULL;
}
} * root;
ifstream fin ("xormax.in");
ofstream fout ("xormax.out");
int n, currXor, maxim, st, dr;
void adauga (int x, int index) {
trie * currNod = root;
for (int i = MAX_BIT; i >= 0; -- i) {
int currBit = bool(x & (1 << i));
if (currNod -> t[currBit] == NULL) {
currNod -> t[currBit] = new trie ();
}
currNod = currNod -> t[currBit];
}
currNod -> index = index;
}
void verif (int x, int finish) {
trie * currNod = root;
int rez = 0;
for (int i = MAX_BIT; i >= 0; -- i) {
int currBit = bool(x & (1 << i));
if (currNod -> t[!currBit] != NULL) {
rez += (1 << i);
currNod = currNod -> t[!currBit];
}
else {
currNod = currNod -> t[currBit];
}
}
if (maxim < rez) {
maxim = rez;
st = currNod -> index + 1;
dr = finish;
}
}
int main () {
fin >> n;
root = new trie ();
for (int i = 1; i <= n; ++ i) {
int x;
fin >> x;
currXor ^= x;
if (i != 1) {
verif (currXor, i);
}
adauga (currXor, i);
}
fout << maxim << " " << st << " " << dr;
return 0;
}