#include #include #include #include #include #include using namespace std; #define MAX 100100 int n, a[MAX], mxs[MAX], mxd[MAX], ps[MAX], pd[MAX]; long long sol = 0; int main() { // freopen("test.in","r",stdin); scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } mxs[1] = a[1]; ps[1] = 1; for (int i = 2; i <= n; i++) { if (a[i] >= mxs[i-1]) { mxs[i] = a[i]; ps[i] = i; } else { mxs[i] = mxs[i-1]; ps[i] = ps[i-1]; } } mxd[n] = a[n]; pd[n] = n; for (int i = n-1; i >= 1; i--) { if (a[i] >= mxd[i+1]) { mxd[i] = a[i]; pd[i] = i; } else { mxd[i] = mxd[i+1]; pd[i] = pd[i+1]; } } sol = a[1] + a[2] - (long long)floor((double)log(2-1)/log(2)); for (int i = 1; i < n; i++) { sol = max(sol, (long long)mxs[i] + mxd[i+1] - (long long)floor((double)log(pd[i+1]-ps[i])/log(2))); } for (int i = 2; i <= n; i++) { sol = max(sol, (long long)mxs[i-1] + mxd[i] - (long long)floor((double)log(pd[i]-ps[i-1])/log(2))); } for (int i = 1; i <= n; i++) { for (int k = i+1; k <= i + 20 && k <= n; k++) { //printf("%d ", k); sol = max(sol, (long long)a[i] + (long long)a[k] - (long long)floor((double)log(k - i)/log(2))); } } cout << sol << "\n"; return 0; }