Pagini recente » Cod sursa (job #1890113) | Cod sursa (job #1793473) | Cod sursa (job #1800660) | Cod sursa (job #1598379) | Cod sursa (job #1004661)
#include <fstream>
using namespace std;
const int MAX_N = 100002;
struct Trie {
int pos;
Trie *next[2];
};
int N, sol = -1, Beg, End;
int S[MAX_N];
Trie *root = new Trie;
inline int search(int val) {
Trie *node = root;
for(int i = 20; i >= 0; --i) {
int bit = ((1 << i)&val);
if(bit)
bit = 1;
if(node->next[!bit])
node = node->next[!bit];
else node = node->next[bit];
}
return node->pos;
}
inline void insert(int val, int p) {
Trie *node = root;
for(int i = 20; i >= 0; --i) {
int bit = ((1 << i)&val);
if(bit)
bit = 1;
if(node->next[bit] == NULL)
node->next[bit] = new Trie;
node = node->next[bit];
}
node->pos = p;
}
int main() {
ifstream f("xormax.in");
ofstream g("xormax.out");
insert(0, 0);
f >> N;
for(int i = 1, x; i <= N; ++i) {
f >> x;
S[i] = x^S[i-1];
int ind = search(S[i]);
if((S[ind] ^ S[i]) > sol)
sol = S[ind] ^ S[i], Beg = ind + 1, End = i;
insert(S[i], i);
}
g << sol << " " << Beg << " " << End << "\n";
f.close();
g.close();
return 0;
}