60004 건초 더미 Gold II

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

문제

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

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

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

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

입력

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

두 번째 줄에는 위치 ii (1iN1 ≤ i ≤ N)에 놓을 수 있는 건초 더미의 방어력 D1,D2,,DND_1 , D_2 , \cdots, D_N이 공백을 사이에 두고 주어진다.

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

출력

QQ개의 줄을 출력한다. 이 중 jj (1jQ1 ≤ j ≤ Q)번째 줄에는 f(Xj,Pj)f(X_j , P_j )의 값을 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N,Q3000001 ≤ N, Q ≤ 300\, 000
  • 1iN1 ≤ i ≤ N인 모든 ii에 대하여 1Di1091 ≤ D_i ≤ 10^9
  • 1jQ1 ≤ j ≤ Q인 모든 jj에 대하여 1XjN1 ≤ X_j ≤ N
  • 1jQ1 ≤ j ≤ Q인 모든 jj에 대하여 1Pj1091 ≤ P_j ≤ 10^9

서브태스크

번호배점제한
16N,Q18N, Q ≤ 18
216N,Q5000N, Q ≤ 5\, 000
3181iN1 ≤ i ≤ N인 모든 ii에 대하여 Di300D_i ≤ 300
4321i<N1 ≤ i < N인 모든 ii에 대하여 DiDi+1D_i ≤ D_{i+1}
528N=QN = Q, 1jQ1 ≤ j ≤ Q인 모든 jj에 대하여 Xj=jX_j = j, P1=P2==PQP_1 = P_2 = \cdots = P_Q
6161jQ1 ≤ j ≤ Q인 모든 jj에 대하여 Xj=NX_j = N
7121i<jN1 ≤ i < j ≤ N인 모든 ii, jj에 대하여 DiDjD_i ≠ D_j
822추가 제약 사항 없음.

예제 입출력

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

출처

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