思路
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 1e5 + 10;
int tr[maxn][2], cnt;
int r[maxn];
int n;
int XOR[maxn];
void add(int x, int pos){
int cur = 0;
for(int i = 30; i >= 0; i--){
int f = (x >> i) & 1;
if(!tr[cur][f]) tr[cur][f] = ++cnt;
cur = tr[cur][f];
}
r[cur] = pos;
}
pii query(int x){
int cur = 0;
pii ans;
for(int i = 30; i >= 0; i--){
int f = (x >> i) & 1; f ^= 1;
if(!tr[cur][f]) f ^= 1;
else ans.first += 1 << i;
cur = tr[cur][f];
}
ans.second = r[cur];
return ans;
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &XOR[i]);
XOR[i] ^= XOR[i - 1];
}
int ans = XOR[1]; int L, R; L = R = 1;
for(int l = n; l >= 1; l--){
add(XOR[l], l);
pii k = query(XOR[l - 1]);
if(k.first > ans){
ans = k.first;
R = k.second;
L = l;
}
else if(k.first == ans){
if(k.second == R) L = max(L, l);
else if(k.second < R){
L = l;
R = k.second;
}
}
}
printf("%d %d %d\n", ans, L, R);
return 0;
}



京公网安备 11010502036488号