오름차순

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

요약
각 쿼리 부분 수열에서 원소를 2배 하는 연산을 최소 몇 번 적용해야 비감소 수열이 되는지 구한다.
난이도

어려움10점 중 8점

유형
그리디, 수학, 누적 합, 이분 탐색
정답자
아직 제출이 없습니다

문제

길이 MM인 양의 정수열 X_1,…,X_MX\_1, \dots , X\_M이 주어질 때, 이 수열을 오름차순으로 만드는 것을 생각해 보자. 수열 X_1,…,X_MX\_1, \dots , X\_M이 오름차순이라는 것은, 각 ii (1≤i≤M−11 ≤ i ≤ M - 1)에 대해 X_i≤X_i+1X\_i ≤ X\_{i+1}이라는 것이다.

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

  • 어떤 ii (1≤i≤M1 ≤ i ≤ M)에 대해 X_iX\_i에 22를 곱한다.

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

길이 NN의 양의 정수열 A_1,…,A_NA\_1, \dots , A\_N과 쿼리 QQ개가 주어진다. 각 쿼리에는 1≤l≤r≤N1 ≤ l ≤ r ≤ N을 만족하는 정수 ll과 rr이 주어진다. 해당 쿼리에 대한 답은 f(A_l,…,A_r)f(A\_l , \dots , A\_r)이다. A_l,…,A_rA\_l , \dots , A\_r은 AA의 ll번째 원소부터 rr번째 원소까지로 이루어진 부분 수열을 의미한다.

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

입력

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

두 번째 줄에 A_1,…,A_NA\_1, \dots , A\_N이 공백으로 구분되어 주어진다.

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

출력

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

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N≤250,0001 ≤ N ≤ 250\\, 000
  • 1≤Q≤250,0001 ≤ Q ≤ 250\\, 000
  • 1≤A_i≤1091 ≤ A\_i ≤ 10^9 (1≤i≤N1 ≤ i ≤ N)
  • 모든 쿼리에 대해 1≤l≤r≤N1 ≤ l ≤ r ≤ N

예제2

  1. 예제 1

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

    입력
    10 5
    2 8 4 9 10 8 5 3 7 7
    2 8
    1 10
    3 3
    1 3
    8 10
    
    예상 출력
    7
    11
    0
    1
    0