#include #include #define lint long long int using namespace std; int v[100005]; multiset Set; void add(int val) { Set.insert(val); } void erase(int val) { Set.erase(Set.find(val)); } lint get_best() { multiset :: iterator it = Set.end(); -- it; lint ans = *it; -- it; ans += *it; return ans; } int main() { ios_base :: sync_with_stdio(false); int n = 0; cin >> n; for (int i = 1; i <= n; ++ i) cin >> v[i]; lint best = -1e18 - 15; for (int step = 2, scad = 0; step <= 2 * n; step *= 2, ++ scad) { Set.clear(); lint best_aux = -1e18 - 15, aux; for (int i = 1; i <= n; ++ i) { add(v[i]); if (i - step >= 1) erase(v[i - step]); aux = get_best(); if (aux > best_aux) best_aux = aux; } if (best_aux - scad > best) best = best_aux - scad; } cout << best << '\n'; return 0; }