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 in PyPy3 (2.4.0) (judge verdict: Wrong Answer)

mod = 1000000007
eps = 10**-9


def main():
    import sys
    input = sys.stdin.readline

    def f(a, b):
        ret = 0
        while a > b:
            ret += 2
            b *= 4
        return ret

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

    right = [0] * (N+1)
    st = [(1, A[-1], A[-1])]
    for i in range(N-2, -1, -1):
        a = A[i]
        st.append((1, a, a))
        right[i] = right[i+1]
        while True:
            if len(st) == 1:
                break
            if st[-1][2] > st[-2][1]:
                na, amin, amax = st.pop()
                nb, bmin, bmax = st.pop()
                k = f(amax, bmin)
                right[i] += nb * k
                st.append((na+nb, amin, bmax * (1<<k)))
            else:
                break
    left = [0] * (N+1)
    left[1] = 1
    st = [(1, A[0], A[0])]
    for i in range(2, N+1):
        a = A[i-1]
        st.append((1, a, a))
        left[i] = left[i-1] + 1
        while True:
            if len(st) == 1:
                break
            if st[-1][2] > st[-2][1]:
                na, amin, amax = st.pop()
                nb, bmin, bmax = st.pop()
                k = f(amax, bmin)
                left[i] += nb * k
                st.append((na + nb, amin, bmax * (1 << k)))
            else:
                break
    ans = 10**10
    for i in range(N+1):
        ans = min(ans, left[i] + right[i])
    print(ans)


if __name__ == '__main__':
    main()