解析
因为 & \& & 运算,越算越小;而 ∥ \| ∥ 运算越算越大,所以根据贪心,直接将 r r r 定为 n − 1 n-1 n−1,然后遍历前两个区间的分割点,维护最大值
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f
const int N=2e5+5;
int n,m,a[N];
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int s1=a[1],s2=a[n-1];
for(int i=2;i<n-1;i++){
s1^=a[i];
}
int ans=0;
for(int i=n-2;i>=1;i--){
ans=max(ans,s1+s2);
s1^=a[i];
s2|=a[i];
}
cout<<ans+a[n];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}