#include using namespace std; # define pb push_back # define mp make_pair # define FORN( a , b , c ) for ( int a = b ; a <= c ; ++ a ) # define FORNBACK( a , b , c ) for ( int a = b ; a >= c ; -- a ) set < pair < int , int > > S ; int v [ 100999 ] ; int main() { ios :: sync_with_stdio ( false ) ; //freopen( "input" , "r" , stdin ) ; //freopen( "output" , "w" , stdout ) ; int n ; cin >> n ; FORN ( i , 1 , n ) cin >> v [ i ] ; S.insert ( mp ( v [ n ] , n ) ) ; long long sol = - ( 1 << 30 ) ; FORNBACK ( i , n - 1 , 1 ) { /*while ( 1 ) { int a = S.rbegin()->first ; int b = S.rbegin()->second ; S.erase ( S.find ( mp ( a , b )) ) ; long long aux1 = v [ i ] + a - floor ( log2 ( b - i ) ) ; sol = max ( sol , aux1 ) ; if ( S.size ( ) ) { if ( aux1 < v [ i ] + S.rbegin()->first - floor ( log2 ( S.rbegin()->second - i ) ) ) continue ; else break ; } else break ; }*/ long long aux = v [ i ] + S.rbegin()->first - floor ( log2 ( S.rbegin()->second - i ) ) ; sol = max ( sol , aux ) ; S.insert ( mp ( v [ i ] , i ) ) ; } cout << sol << '\n' ; // FORN ( i , 1 , n ) // FORN ( j , i + 1 , n ) // cout << i << ' ' << j << ' ' << v [ i ] + v [ j ] - floor ( log2 ( j - i ) ) << '\n' ; return 0 ; }