/* */ //#pragma comment(linker, "/STACK:16777216") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define eps 1e-9 #define M_PI 3.141592653589793 #define bs 1000000007 #define bsize 512 const int N = (1 << 18); using namespace std; int n; long long ar[N]; long long t[N * 4]; long long ans; void build(int v, int tl, int tr) { if (tl == tr) { t[v] = ar[tl]; return; } int tm = tl + tr; tm /= 2; build(v * 2, tl, tm); build(v * 2 + 1, tm + 1, tr); t[v] = max(t[v * 2], t[v * 2 + 1]); } long long get(int v, int tl, int tr, int l, int r) { if (l > r) return -1e18; if (l == tl&&r == tr) return t[v]; int tm = tl + tr; tm /= 2; return max(get(v * 2, tl, tm, l, min(r, tm)), get(v * 2 + 1, tm + 1, tr, max(tm + 1, l), r)); } int main(){ //freopen("route.in","r",stdin); //freopen("route.out","w",stdout); //freopen("F:/in.txt", "r", stdin); //freopen("F:/output.txt", "w", stdout); ios_base::sync_with_stdio(0); //cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { cin >> ar[i]; } build(1, 0, n - 1); ans = -1e18; for (int cl = 0; cl <= 17; cl++) { int mdist = (1 << cl) * 2 - 1; // cout << cl << " " << mdist << endl; for (int i = 0; i < n; i++) { int l, r; l = i - mdist; r = i - 1; if (l < 0) l = 0; long long here = get(1, 0, n - 1, l, r); ans = max(ans, here + ar[i] - cl); } } cout << ans << endl; cin.get(); cin.get(); return 0; }