#include #include #include using namespace std; const int N = 100100; const int INF = (1 << 30) + 1; int best[N]; pair < int, int > v[N]; bool sort_pair(pair < int, int > a, pair < int, int > b) { return a.first > b.first; } int main() { int n, i, j, val, cnt, ans; scanf("%d", &n); for(i = 1; i <= n; i++) { scanf("%d", &val); v[i] = make_pair(val, i); } sort(v+1, v+n+1, sort_pair); for(i = 1; i <= n; i++) { best[i] = -INF; } cnt = 0; for(i = 1; i <= n && cnt < n; i++) { for(j = i + 1; j <= n && cnt < n; j++) { if(best[abs(v[i].second - v[j].second)] < v[i].first + v[j].first) { best[abs(v[i].second - v[j].second)] = v[i].first + v[j].first; cnt++; } } } ans = -INF; for(i = 1; i <= n; i++) { ans = max(ans, best[i] - (int)floor(log2(i))); } printf("%d\n", ans); return 0; }