Pagini recente » Cod sursa (job #2127201) | Cod sursa (job #738690) | Cod sursa (job #2776558) | Cod sursa (job #531045) | Cod sursa (job #2365818)
#include <bits/stdc++.h>
const int MAX_N = 100000;
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
int n, sol, st, dr;
int v[MAX_N + 5];
class Node {
public:
int last;
Node* fii[2];
Node() {
last = 0;
fii[0] = fii[1] = 0;
}
};
Node* trie = new Node;
void insert_trie(int val, int index) {
Node* node = trie;
for(int i = 20; i >= 0; i--) {
int bit = ((val & (1 << i)) > 0) ? 1 : 0;
if(!node-> fii[bit])
node-> fii[bit] = new Node;
node = node-> fii[bit];
}
node-> last = index;
}
int find_trie(int val) {
Node* node = trie;
for(int i = 20; i >= 0; i--) {
int bit = ((val & (1 << i)) > 0) ? 1 : 0;
if(node-> fii[!bit])
node = node-> fii[!bit];
else node = node-> fii[bit];
}
return node-> last;
}
int main() {
fin >> n;
for(int i = 1; i <= n; i++) {
fin >> v[i];
v[i] ^= v[i - 1];
}
sol = 1; st = dr = 1;
insert_trie(v[1], 1);
for(int i = 2; i <= n; i++) {
int ind = find_trie(v[i]);
if((v[i] ^ v[ind]) > sol) {
sol = v[i] ^ v[ind];
st = ind + 1;
dr = i;
}
insert_trie(v[i], i);
}
fout << sol << ' ' << st << ' ' << dr << '\n';
return 0;
}