Bike loves looking for the second maximum element in the sequence. The second maximum element in the sequence of distinct numbers x1, x2, ..., xk (k > 1) is such maximum element xj, that the following inequality holds: .
The lucky number of the sequence of distinct positive integers x1, x2, ..., xk (k > 1)is the number that is equal to the bitwise excluding OR of the maximum element of the sequence and the second maximum element of the sequence.
You've got a sequence of distinct positive integers s1, s2, ..., sn (n > 1). Let's denote sequence sl, sl + 1, ..., sr as s[l..r] (1 ≤ l < r ≤ n). Your task is to find the maximum number among all lucky numbers of sequences s[l..r].
Note that as all numbers in sequence s are distinct, all the given definitions make sence.
Input
The first line contains integer n (1 < n ≤ 105). The second line contains n distinct integers s1, s2, ..., sn (1 ≤ si ≤ 109).
Output
Print a single integer — the maximum lucky number among all lucky numbers of sequences s[l..r].
Examples
Input
5
5 2 1 4 3
Output
7
Input
5
9 8 3 5 7
Output
15
Note
For the first sample you can choose s[4..5] = {4, 3} and its lucky number is (4 xor 3) = 7. You can also choose s[1..2].
For the second sample you must choose s[2..5] = {8, 3, 5, 7}.
题解:单调栈维护一下递减序列,每次pop出的正是以该数为最大时的次大值,每次push时,栈顶元素正是往左匹配 以这个数为次大值时只能匹配到的最大值,扫一遍就ok了
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
const int N=1e5+10;
int n,a[N];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
stack<int> s;
s.push(a[1]);
int ans=0;
for(int i=2;i<=n;i++)
{
while(!s.empty()&&a[i]>s.top())
{
ans=max(ans,a[i]^s.top());
s.pop();
}
if(!s.empty())
ans=max(ans,s.top()^a[i]);
s.push(a[i]);
}
cout<<ans<<endl;
}
return 0;
}