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

struct P
{
    long long x,y;

    bool operator<(const P &a)const{
        if(x!=a.x)
              return x>a.x;
        return y>a.y;
    }

};

vector<int> v;

//bitset<4001000> b;
int i,n,d,m,k,a,b,c,h;

int o[211115];
long long l[222221];
long long j[222221];
int e;


//int dx[10]={2,2,-2,-2,1,1,-1,-1},dy[10]={1,-1,1,-1,2,-2,2,-2};

int dx[10]={0,1,0,-1,1,1,-1,-1},dy[10]={1,0,-1,0,1,-1,1,-1},dz[10]={0,0,0,0,1,-1};
long long mod=998244353,mod2=1000000009,mod3=2017;
long long x,z,y;
double pi=3.14159265;
P u[1];
stack<P> s;
//set<int> s[222][22];
//priority_queue<P> q;
queue<int> q;
//2147483647
//'1'==49;
//'A'==65;
//'a'==97;
//unordered_
//map<int,int> p;
/*
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
unordered_map<long long, int, custom_hash> safe_map;
*/
//list<int> l;

string r;
//char r[222253];
//deque<int> de;
//srand((int)time(NULL));
/*bool as(P a,P b)
{
    if(a.x!=b.x)
    return a.x<b.x;
    return a.y<b.y;
}*/



bool as(P a,P b)
{
    if(a.x!=b.x)
        return a.x<b.x;
    return a.y<b.y;
}

int f(int n,int m)
{
    long long x=n;
    int p=0;
    for(;x*4<=m;p++,x*=4);
    return p;
}

int g(int n,int m)
{
    long long x=n;
    int p=0;
    for(;x<m;x*=4,p++);
    return p;
}

int main()
{
    scanf("%d",&a);
    for(int t=1;t<=a;t++)
    {
        //o[t]=t%2+1;
        scanf("%d",&o[t]);

    }
    o[a+1]=1987654321;
    l[a]=0;
    //s.push({0,a+1});
    for(int t=a-1;t>0;l[t]+=l[t+1],t--)
    if(o[t]<o[t+1])
    {
        n=f(o[t],o[t+1]);
        if(n)
        s.push({n,t});
    }
    else
    {
        n=g(o[t+1],o[t]);
        for(;s.size()&&n;)
        if(n<s.top().x)
        {
            l[t]+=(s.top().y-t)*n;
            //n-=s.top().x;
            P m=s.top();
            m.x-=n;
            n=0;
            //n-=s.top().x;
            s.pop();
            s.push(m);
        }
        else
        {
            l[t]+=(s.top().y-t)*s.top().x;
            //n-=s.top().x;
            P m=s.top();
            //m.x-=n;
            n-=s.top().x;
            s.pop();
            //s.push(m);
        }
        if(n)
        {
            l[t]+=(a-t)*n;
        }
    }
    for(int t=1;t<=a;l[t]*=2,t++);
    for(;s.size();s.pop());
        //printf("%d ",l[t]);
    for(int t=2;t<=a;j[t]+=j[t-1],t++)
    if(o[t-1]>o[t])
    {
        n=f(o[t],o[t-1]);
        if(n)
        s.push({n,t});
    }
    else
    {
        n=g(o[t-1],o[t]);
        //printf("\n%d\n",n);

        for(;s.size()&&n;)
        if(n<s.top().x)
        {
            j[t]+=(t-s.top().y)*n;
            //n-=s.top().x;
            P m=s.top();
            m.x-=n;
            n=0;
            //n-=s.top().x;
            s.pop();
            s.push(m);
        }
        else
        {
            j[t]+=(t-s.top().y)*s.top().x;
            //n-=s.top().x;
            P m=s.top();
            //m.x-=n;
            n-=s.top().x;
            s.pop();
            //s.push(m);
        }
        if(n)
        {
            j[t]+=(t-1)*n;
        }
    }
    long long k=l[1];
    for(int t=1;t<=a;t++)
        k=min(k,l[t+1]+t+j[t]*2);
    printf("%lld",k);
        //printf("%d ",j[t]);
}





Measured memory_bytes: 4352