만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

기차 여행

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

요약
각 역의 등급으로 열차 종류별 정차 역이 정해질 때, 주어진 두 역 사이를 이동하는 데 필요한 최소 중간 정차 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
배열, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

JOI 철도는 철도 노선 하나를 운영하는 회사이다. 이 철도는 직선 위에 놓인 N개의 역으로 이루어져 있고, 역에는 1번부터 N번까지 번호가 붙어 있다. 각 ii (1≤i≤N−11 \le i \le N-1)에 대해 ii번 역과 i+1i+1번 역은 선로로 연결되어 있다.

JOI 철도에는 K종류의 열차가 있으며, 모든 열차는 양방향으로 달린다. 열차 종류는 1부터 K까지의 정수로 나타낸다. 각 역에는 1부터 K까지의 정수인 레벨이 있다. 각 ii (1≤i≤N1 \le i \le N)에 대해 ii번 역의 레벨은 LiL_i이다. 1번 역과 N번 역의 레벨은 모두 K이다.

종류가 jj (1≤j≤K1 \le j \le K)인 열차는 레벨이 jj 이상인 역에는 모두 서고, 그 밖의 역에는 서지 않는다. 1번 역과 N번 역의 레벨은 K이므로 모든 열차가 이 두 역에 선다.

많은 승객이 매일 이 철도를 이용한다. 이동 중에 승객은 목적지와 반대 방향으로 가는 열차를 탈 수도 있고, 목적지를 지나칠 수도 있다. 여행의 마지막에는 목적지에서 반드시 내려야 한다. 승객은 역에 서는 것을 싫어하므로, 지나치는 역의 수나 열차를 갈아타는 횟수와 관계없이 중간 정차 횟수가 가장 적은 경로를 택한다. 환승을 위해 역에 정차하면 정차 1회로 센다. 출발역에서의 첫 정차와 목적지에서의 마지막 정차는 중간 정차로 세지 않는다.

각 승객에 대해 중간 정차 횟수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 역의 개수 NN, 열차 종류의 개수 KK, 질의의 개수 QQ가 공백으로 구분되어 주어진다. 다음 NN개의 줄에는 각각 ii번 역의 레벨 LiL_i가 한 정수로 주어진다. 다음 QQ개의 줄에는 kk번째 승객의 출발역 AkA_k와 목적지 BkB_k가 공백으로 구분되어 주어진다.

출력

QQ개의 줄을 출력한다. kk번째 줄에는 역 AkA_k에서 역 BkB_k까지 가는 경로의 중간 정차 횟수 최솟값을 출력한다.

제한

  • 2≤N≤100 0002 \le N \le 100\,000
  • 1≤K≤N1 \le K \le N
  • 1≤Q≤100 0001 \le Q \le 100\,000
  • 1≤Li≤K1 \le L_i \le K (1≤i≤N1 \le i \le N)
  • 1≤Ak≤N1 \le A_k \le N (1≤k≤Q1 \le k \le Q)
  • 1≤Bk≤N1 \le B_k \le N (1≤k≤Q1 \le k \le Q)
  • Ak≠BkA_k \neq B_k (1≤k≤Q1 \le k \le Q)

예제3

  1. 예제 1

    입력
    9 3 3
    3
    1
    1
    1
    2
    2
    2
    3
    3
    2 4
    4 9
    6 7
    
    예상 출력
    1
    3
    0
    
  2. 예제 2

    입력
    5 2 1
    2
    1
    1
    1
    2
    1 4
    
    예상 출력
    1
    
  3. 예제 3

    입력
    15 5 15
    5
    4
    1
    2
    3
    1
    1
    2
    4
    5
    4
    1
    5
    3
    5
    8 1
    11 1
    5 3
    6 11
    9 12
    15 14
    15 2
    3 12
    2 1
    4 8
    15 5
    12 6
    1 13
    13 8
    14 9
    
    예상 출력
    2
    1
    1
    3
    2
    0
    3
    4
    0
    1
    3
    4
    1
    2
    2