Pagini recente » Cod sursa (job #3225016) | Cod sursa (job #1794606) | Cod sursa (job #1748220) | Cod sursa (job #540515) | Cod sursa (job #3120962)
#include <bits/stdc++.h>
#define NMAX 100005
#define MAX (1 << 23)
using namespace std;
int xuma[NMAX];
int trie[MAX];
void add_trie(int x) {
for (int b = 20, pos = 1; b >= 0; --b) {
if ((1 << b) & x) {
pos = (pos << 1) + 1;
} else {
pos <<= 1;
}
trie[pos] = 1;
}
}
int search_trie(int x) {
int best = 0;
for (int b = 20, pos = 1; b >= 0; --b) {
if ((1 << b) & x) {
if (trie[pos << 1]) {
pos <<= 1;
} else {
best |= (1 << b);
pos = (pos << 1) + 1;
}
} else {
if (trie[(pos << 1) + 1]) {
best |= (1 << b);
pos = (pos << 1) + 1;
} else {
pos <<= 1;
}
}
}
return best;
}
void solve()
{
int n;
cin >> n;
xuma[0] = 0;
for (int i = 1, x; i <= n; ++i) {
cin >> x;
xuma[i] = xuma[i - 1] ^ x;
}
trie[1] = 1;
add_trie(xuma[0]);
int ans = xuma[1], left = 1, right = 1;
for (int i = 1; i <= n; ++i) {
int aux = search_trie(xuma[i]);
if (ans < (xuma[i] ^ aux)) {
ans = xuma[i] ^ aux;
left = aux;
right = i;
}
add_trie(xuma[i]);
}
for (int i = right - 1; i >= 0; --i)
if (xuma[i] == left) {
left = i + 1;
break;
}
cout << ans << ' ' << left << ' ' << right << '\n';
}
int main()
{
freopen("xormax.in", "r", stdin);
freopen("xormax.out", "w", stdout);
int t = 1;
while(t--)
solve();
return 0;
}