60022 오름차순

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

문제

길이 MM인 양의 정수열 X1,,XMX_1, \dots , X_M이 주어질 때, 이 수열을 오름차순으로 만드는 것을 생각해 보자. 수열 X1,,XMX_1, \dots , X_M이 오름차순이라는 것은, 각 ii (1iM11 ≤ i ≤ M - 1)에 대해 XiXi+1X_i ≤ X_{i+1}이라는 것이다.

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

  • 어떤 ii (1iM1 ≤ i ≤ M)에 대해 XiX_i22를 곱한다.

연산을 최소 횟수로 적용해서 XX를 오름차순으로 만들 때, 이 최소 횟수를 f(X)f(X)라고 하자.

길이 NN의 양의 정수열 A1,,ANA_1, \dots , A_N과 쿼리 QQ개가 주어진다. 각 쿼리에는 1lrN1 ≤ l ≤ r ≤ N을 만족하는 정수 llrr이 주어진다. 해당 쿼리에 대한 답은 f(Al,,Ar)f(A_l , \dots , A_r)이다. Al,,ArA_l , \dots , A_rAAll번째 원소부터 rr번째 원소까지로 이루어진 부분 수열을 의미한다.

각 쿼리에 대한 답을 구하여라.

입력

첫 번째 줄에 NNQQ가 공백으로 구분되어 주어진다.

두 번째 줄에 A1,,ANA_1, \dots , A_N이 공백으로 구분되어 주어진다.

이후 QQ개의 줄에 걸쳐 쿼리들이 주어진다. 각 쿼리는 llrr이 공백으로 구분되어 주어진다.

출력

QQ개의 줄에 걸쳐 쿼리들의 답을 입력 순서대로 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N2500001 ≤ N ≤ 250\, 000
  • 1Q2500001 ≤ Q ≤ 250\, 000
  • 1Ai1091 ≤ A_i ≤ 10^9 (1iN1 ≤ i ≤ N)
  • 모든 쿼리에 대해 1lrN1 ≤ l ≤ r ≤ N

서브태스크

15N10000N ≤ 10\, 000, Q10000Q ≤ 10\, 000
27N10000N ≤ 10\, 000
328모든 쿼리에 대해 r=Nr = N
410AiAi+1A_i ≥ A_{i+1} (1iN11 ≤ i ≤ N - 1)
55Ai2A_i ≤ 2 (1iN1 ≤ i ≤ N)
610Ai=2kiA_i = 2^{k_i}를 만족하는 00 이상의 정수 kik_i가 존재 (1iN1 ≤ i ≤ N)
735추가 제약 조건 없음

예제 입출력

예제 입력 1
10 5
5 2 7 3 2 9 6 3 3 5
3 9
1 10
1 8
2 4
8 9
예제 출력 1
14
27
19
2
0
예제 입력 2
10 5
2 8 4 9 10 8 5 3 7 7
2 8
1 10
3 3
1 3
8 10
예제 출력 2
7
11
0
1
0

출처

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