#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
 
using tpl = tuple<int, int, int>;
typedef pair<int,int> pii;

void fastStream(){cin.tie(0);std::ios_base::sync_with_stdio(0);}

ll N;
ll A[200010];


ll dp_pos[200010][16];
ll dp_neg[200010][16];

int main(){
    cin >> N;
    for(ll i = 0; i < N; i++) cin >> A[i];
    for(ll pos = N - 1; pos >= 0; pos--){
        for(ll ope_cnt = 0; ope_cnt <= 15; ope_cnt++){ 
            ll res = 1LL << 62;
            if(pos == N - 1) {
                res = 0;
            }
            else{
                // 現在のところの値に対して 4 ^ ope_cnt したものと、次の要素の値を比較し、次の値が何回計算する必要があるか調べる
                ll c_val = A[pos] * (1LL << (ope_cnt * 2));
                if(c_val <= A[pos + 1]){
                    // 操作の必要なし
                    res = dp_pos[pos + 1][0];
                }
                else{
                    // 何回操作したら超えるか調べる
                    // 15を超えた分は、残りの数字をすべて4でかける操作で代用できるので、その分を加算しておくことで代用する
                    // c_val <= A[pos + 1] * (4 ^ n_cnt)となる最小のn_cntを計算する
                    ll n_cnt = 0;
                    ll cmp = (A[pos + 1] + c_val - 1) / A[pos + 1];
                    for(; ; n_cnt++){
                        if(cmp <= 1LL << (n_cnt * 2)){
                            break;
                        }
                    }
                    if(n_cnt > 15){
                        ll diff = n_cnt - 15;
                        res = (N - 1 - pos) * 2 * diff + 15 * 2 + dp_pos[pos + 1][15];
                    }
                    else{
                        res = n_cnt * 2 + dp_pos[pos + 1][n_cnt];
                    }
                }

            }
            dp_pos[pos][ope_cnt] = res;
        }
    }

    for(ll pos = 0; pos < N; pos++){
        // 負の場合は
        for(ll ope_cnt = 0; ope_cnt <= 15; ope_cnt++){ 
            ll res = 1LL << 62;
            if(pos == 0) {
                res = 0;
            }
            else{
                // 現在のところの値に対して 2 ^ (2 * ope_cnt + 1) したものと、次の要素の値を比較し、次の値が何回計算する必要があるか調べる
                ll c_val = A[pos] * (1LL << (1 + ope_cnt * 2));
                if(c_val <= A[pos - 1]){
                    // 操作の必要なし
                    res = dp_neg[pos - 1][0];
                }
                else{
                    // 何回操作したら超えるか調べる
                    // 15を超えた分は、残りの数字をすべて4でかける操作で代用できるので、その分を加算しておくことで代用する
                    // c_val <= A[pos - 1] * (2 ^ (2*n_cnt + 1))となる最小のn_cntを計算する
                    ll n_cnt = 0;
                    ll cmp = (A[pos - 1] + c_val - 1) / A[pos - 1];
                    for(; ; n_cnt++){
                        if(cmp <= 1LL << (n_cnt * 2 + 1)){
                            break;
                        }
                    }
                    if(n_cnt > 15){
                        ll diff = n_cnt - 15;
                        res = pos * 2 * diff + 15 * 2 + dp_neg[pos - 1][15];
                    }
                    else{
                        res = n_cnt * 2 + dp_neg[pos - 1][n_cnt];
                    }
                }
            }
            // マイナスにする分を加算しておく
            res++;
            dp_neg[pos][ope_cnt] = res;
        }
    }

    ll ans = min(dp_pos[0][0], dp_neg[N-1][0]);
    for(ll i = 1; i < N; i++){
        // iから正になる場合
        ans = min(ans, dp_neg[i-1][0] + dp_pos[i][0]);
    }
    cout<< ans << endl;

    return 0;
}


Measured memory_bytes: 51840