func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6;   int n, t[1000001];   struct data {     int num, loc, vis;   } b[1000001];   int a[1000001];   int lowbit(int x) { return x & (-x); }   int Query(int x) {     int sum = 0;     while (x > 0) {       sum = max(sum, t[x]);       x -= lowbit(x);     }     return sum;   }   void Add(int x, int va) {     while (x <= N) {       t[x] = max(t[x], va);       x += lowbit(x);     }   }   bool cmp(data p, data q) { return p.num < q.num; }   bool cmp2(data p, data q) { return p.vis < q.vis; }   int work() {     memset(t, 0, sizeof(t));     for (int i = 1; i <= n; i++) {       b[i].num = a[i];       b[i].vis = i;     }     sort(b + 1, b + n + 1, cmp);     for (int i = 1; i <= n; i++) b[i].loc = n + 1 - i;     sort(b + 1, b + n + 1, cmp2);     int ans = 0;     for (int i = 1; i <= n; i++) {       int nowans = Query(b[i].loc);       Add(b[i].loc, i);       if (nowans == 0) continue;       ans = max(ans, b[i].num ^ b[nowans].num);     }     return ans;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     int ans = work();     for (int i = 1; i <= n / 2; i++) swap(a[i], a[n + 1 - i]);     ans = max(ans, work());     printf( %d n , ans);     return 0;   }   