用单调栈维护区间最大值。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100100;
int stk[MAXN],a[MAXN];
int main()
{
int n,ans,cnt,i;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
ans=0;
cnt=0;
for(i=1;i<=n;i++)
{
while(cnt>=1&&a[i]>a[stk[cnt]])
cnt--;
if(cnt)
ans=max(ans,a[i]^a[stk[cnt]]);
stk[++cnt]=i;
}
cnt=0;
for(i=n;i>=1;i--)
{
while(cnt>=1&&a[i]>a[stk[cnt]])
cnt--;
if(cnt)
ans=max(ans,a[i]^a[stk[cnt]]);
stk[++cnt]=i;
}
printf("%d\n",ans);
}
}