건초 더미

시간 제한2초메모리 제한2048 MB

요약
위치 X에서 힘 P로 발사된 화살이 X 이하에서 멈추게 하려면 1..N 중 몇 개의 건초 더미를 골라야 하는지 최솟값을 구하고, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

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

문제

수직선의 위치 00에서 오른쪽 방향으로 정수 크기의 힘을 가진 화살이 발사된다. 각 정수 위치 ii (1≤i≤N1 ≤ i ≤ N)에는 방어력 D_iD\_i를 가진 건초 더미를 최대 하나 설치할 수 있다.

화살이 건초 더미에 부딪쳤을 때 화살의 힘이 방어력보다 작거나 같으면, 화살은 즉시 멈춘다. 반대로 화살의 힘이 방어력보다 크면, 힘이 방어력 D_iD\_i 만큼 감소한 뒤 건초 더미를 관통해 계속 날아간다.

두 정수 XX, PP에 대하여 f(X,P)f(X, P)의 값을 "힘이 PP인 화살이 위치 XX에서 멈추거나 위치 XX보다 왼쪽에서 멈추도록 하기 위해 설치해야 하는 건초 더미의 최소 개수" 라고 정의하자. 만약 어떠한 설치 방법으로도 화살을 멈추게 할 수 있는 방법이 없다면, **f(X, P) = −1**로 정의한다.

QQ개의 정수 쌍 (X_j,P_j)(X\_j , P\_j ) (1≤j≤Q1 ≤ j ≤ Q)에 대해 각각 f(X,P)f(X , P )의 값을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에는 건초 더미의 설치할 수 있는 위치의 개수 NN과 발사되는 화살의 횟수 QQ가 공백을 사이에 두고 주어진다.

두 번째 줄에는 위치 ii (1≤i≤N1 ≤ i ≤ N)에 놓을 수 있는 건초 더미의 방어력 D_1,D_2,⋯ ,D_ND\_1 , D\_2 , \cdots, D\_N이 공백을 사이에 두고 주어진다.

세 번째 줄부터 QQ개의 줄에 걸쳐 QQ개의 정수 쌍이 주어진다. 이 중 jj (1≤j≤Q1 ≤ j ≤ Q)번째 줄에는 X_jX\_j와 P_jP\_j가 공백을 사이에 두고 주어진다.

출력

QQ개의 줄을 출력한다. 이 중 jj (1≤j≤Q1 ≤ j ≤ Q)번째 줄에는 f(X_j,P_j)f(X\_j , P\_j )의 값을 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N,Q≤300,0001 ≤ N, Q ≤ 300\\, 000
  • 1≤i≤N1 ≤ i ≤ N인 모든 ii에 대하여 1≤D_i≤1091 ≤ D\_i ≤ 10^9
  • 1≤j≤Q1 ≤ j ≤ Q인 모든 jj에 대하여 1≤X_j≤N1 ≤ X\_j ≤ N
  • 1≤j≤Q1 ≤ j ≤ Q인 모든 jj에 대하여 1≤P_j≤1091 ≤ P\_j ≤ 10^9

예제2

  1. 예제 1

    입력
    5 6
    2 5 6 1 12
    1 1
    5 14
    2 8
    3 7
    4 14
    5 1
    
    예상 출력
    1
    2
    -1
    2
    4
    1
    
  2. 예제 2

    입력
    5 5
    3 6 1 1 10
    1 10
    2 10
    3 10
    4 10
    5 10
    
    예상 출력
    -1
    -1
    3
    3
    1