60018 두 배

시간 제한: 1초 메모리 제한: 1024MB

문제

길이 NN인 양의 정수열 A1,,ANA_1, \dots , A_N이 주어진다. 이 수열을 오름차순으로 만들려 한다. 수열 A1,,ANA_1, \dots , A_N이 오름차순이라는 것은, 각 ii (1iN11 ≤ i ≤ N - 1)에 대해 AiAi+1A_i ≤ A_{i+1}이라는 것이다.

수열 AA를 오름차순으로 만들기 위해, 수열 AA에 다음 연산을 몇 번이든 반복해서 적용할 수 있다.

  • 어떤 ii (1iN1 ≤ i ≤ N)에 대해 AiA_i22를 곱한다.

연산을 최소 횟수로 적용해서 AA를 오름차순으로 만들고 싶다. 이때, 최소 횟수를 구하라.

입력

첫 번째 줄에 NN이 주어진다.

두 번째 줄에 A1,,ANA_1, \dots , A_N이 주어진다.

출력

첫 번째 줄에 답을 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N2500001 ≤ N ≤ 250\, 000
  • 1Ai10000001 ≤ A_i ≤ 1\, 000\, 000 (1iN1 ≤ i ≤ N)

서브태스크

112ii (1iN1 ≤ i ≤ N)에 대해, Ai=1A_i = 1 또는 Ai=2A_i = 2
210ii (1iN1 ≤ i ≤ N)에 대해, Ai=2kiA_i = 2^{k_i}를 만족하는 00 이상의 정수 kik_i가 존재
311N10N ≤ 10
419ii (1iN1 ≤ i ≤ N)에 대해, Ai=2A_i = 2 또는 Ai=3A_i = 3
520ii (1iN11 ≤ i ≤ N - 1)에 대해, AiAi+1A_i ≥ A_{i+1}
628추가 제약 조건 없음

힌트

예제 1

A2A_2, A4A_4에 각각 두 번씩 연산을 적용하면 된다. 연산을 적용한 이후에 수열 AA[3,4,4,4,5][3, 4, 4, 4, 5]가 된다.

예제 2

A2A_2에 두 번, A4A_4에 세 번, A5A_5에 한 번 연산을 적용하면 된다. 연산을 적용한 이후에 수열 AA[3,4,5,8,10][3, 4, 5, 8, 10]가 된다.

예제 입출력

예제 입력 1
5
3 1 4 1 5
예제 출력 1
4
예제 입력 2
5
3 1 5 1 5
예제 출력 2
6
예제 입력 3
5
1 2 3 4 5
예제 출력 3
0

출처

올림피아드 한국정보올림피아드 KOI 2024 1차 초등부 2번 중등부 1번
solution.cpp
에디터 불러오는 중...