Problem:
 Score : 800 points    Problem Statement There are N positive integers A_1, A_2, ..., A_N .
Takahashi can perform the following operation on these integers any number of times:   Choose 1 \leq i \leq N and multiply the value of A_i by -2 .   Notice that he multiplies it by minus two.  He would like to make A_1 \leq A_2 \leq ... \leq A_N holds.
Find the minimum number of operations required. If it is impossible, print -1 .      Constraints  1 \leq N \leq 200000  1 \leq A_i \leq 10^9         Input Input is given from Standard Input in the following format:  N  A_1  A_2  ...  A_N       Output Print the answer.        Sample Input 1 4
3 1 4 1      Sample Output 1 3  One possible solution is:   Choose i=4 and multiply the value of A_4 by -2 . A_1, A_2, A_3, A_4 are now 3, 1, 4, -2 .  Choose i=1 and multiply the value of A_1 by -2 . A_1, A_2, A_3, A_4 are now -6, 1, 4, -2 .  Choose i=4 and multiply the value of A_4 by -2 . A_1, A_2, A_3, A_4 are now -6, 1, 4, 4 .        Sample Input 2 5
1 2 3 4 5      Sample Output 2 0  A_1 \leq A_2 \leq ... \leq A_N holds before any operation is performed.       Sample Input 3 8
657312726 129662684 181537270 324043958 468214806 916875077 825989291 319670097      Sample Output 3 7

Solution (Python):
N = int(input())
A = list(map(int, input().split()))

R = [0] * (N+1)
L = [0] * (N+1)
l = 0
ap = A[-1]
P = [0] * 20
stack = [0]

for i in range(N):
    a = A[-1-i]
    
    while ap < a:
        
        l += (i-stack[-1])<<1
        if stack[-1] != 0: del stack[-1]
        ap <<= 2
    a4 = a<<2
    while ap >= a4:
        ap >>= 2
        stack.append(i)
    R[-(i+2)] = l
    ap = a
ap = -A[0]
l = 0
stack = [0]
for i in range(N):
    l += 1
    a = -A[i]
    

    while ap > a:
        
        l += (i-stack[-1])<<1
        if stack[-1] != 0: del stack[-1]
        ap <<= 2
    a4 = a << 2
    while ap <= a4:
        ap >>= 2
        stack.append(i)
    
    L[i+1] = l
    ap = a

ans = float("inf")
for l, r in zip(L, R):
    ans = min(ans, l+r)
print(ans)