#include #include using namespace std; #define mp make_pair const int NMAX = 1e5 + 5, INF = 2e9; int n, val[NMAX]; int f (int p) { int i, sol, dmax = (1 << (p + 1)) - 1; deque q; sol = -INF; for(i = 1; i <= n; ++ i) { while(!q.empty() && q.front() < i - dmax) q.pop_front(); if(!q.empty()) sol = max(sol, val[i] + val[q.front()]); while(!q.empty() && val[i] > val[q.back()]) q.pop_back(); q.push_back(i); } return sol; } int main() { int p, ans, i; scanf("%d", &n); for(i = 1; i <= n; ++ i) scanf("%d", &val[i]); ans = -INF; for(p = 0; (1 << p) <= n; ++ p) ans = max(ans, f(p) - p); printf("%d\n", ans); return 0; }