#include #include #include using namespace std; #define DIM 1000005 int rmq[18][DIM]; const int INF = -0x3f3f3f3f; int N; int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif // ONLINE_JUDGE scanf("%d\n", &N); memset(rmq, INF, sizeof(rmq)); for(int i = 1; i <= N; ++i) { scanf("%d", &rmq[0][i]); } for(int i = 1; i < 18; ++i) { for(int j = 1; j <= N; ++j) { rmq[i][j] = max(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]); } } long long ans = INF; for(int i = 1; i < N; ++i) { for(int j = 0; j < 18; ++j) { ans = max(ans, (long long) rmq[0][i] + rmq[j][i + (1 << j)] - j); } } cout << ans << '\n'; return 0; }