아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

순열 CFG

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

요약
순열로 정의된 문맥 자유 문법의 확장을 n에서 시작해 s번 적용한 리스트에서, 정수 k가 앞부분에 몇 번 나오는지 묻는 질의에 답한다.
난이도

어려움10점 중 9점

유형
재귀, 조합론, 동적 계획법, 누적 합
정답자
아직 제출이 없습니다

문제

정수 11부터 nn까지의 순열을 생각하자. 이때 각 수 11부터 nn을 문맥 자유 문법(CFG)의 비단말 기호로 본다. 각 수 kk는 11부터 kk까지의 정수를 순열의 순서대로 나열한 리스트로 확장된다. 예를 들어 n=4n=4이고 순열이 11 44 33 22라면:

  • 1  ⟹  11 \implies 1
  • 2  ⟹  12 \implies 1 22
  • 3  ⟹  13 \implies 1 33 22
  • 4  ⟹  14 \implies 1 44 33 22

이제 nn에서 시작해 각 단계마다 이 규칙을 적용해 정수의 새 리스트를 만드는 과정을 생각하자. 위 예에서 첫 단계에서는:

1  4  3  2⏞4\overbrace{1 \; 4 \; 3 \; 2}^{4}

둘째 단계에서는:

1⏞11  4  3  2⏞4  1  3  2⏞3  1  2⏞2\overbrace{1}^{1} \overbrace{1 \; 4 \; 3 \; 2}^{4} \; \overbrace{1 \; 3 \; 2}^{3} \; \overbrace{1 \; 2}^{2}

셋째 단계에서는:

1⏞11⏞11  4  3  2⏞4  1  3  2⏞3  1  2⏞21⏞11  3  2⏞3  1  2⏞21⏞11  2⏞2 \overbrace{1}^{1} \overbrace{1}^{1} \overbrace{1 \; 4 \; 3 \; 2}^{4} \; \overbrace{1 \; 3 \; 2}^{3} \; \overbrace{1 \; 2}^{2} \overbrace{1}^{1} \overbrace{1 \; 3 \; 2}^{3} \; \overbrace{1 \; 2}^{2} \overbrace{1}^{1} \overbrace{1 \; 2}^{2}

순열, 단계 수, 그리고 이 과정으로 만들어진 리스트의 접두사에서 특정 정수가 몇 번 나타나는지 묻는 쿼리 목록이 주어질 때, 모든 쿼리에 답하라.

입력

첫째 줄에 세 정수 nn (2≤n≤1052 \le n \le 10^5), ss (1≤s≤51 \le s \le 5), qq (1≤q≤2⋅1051 \le q \le 2 \cdot 10^5)가 주어진다. nn은 순열의 크기, ss는 과정을 적용하는 단계 수, qq는 쿼리의 수다.

다음 nn개 줄에 각각 정수 pp (1≤p≤n1 \le p \le n)가 하나씩 주어진다. 이는 순열을 순서대로 나열한 것이다. 모든 pp의 값은 서로 다르다.

다음 qq개 줄에 각각 두 정수 kk (1≤k≤n1 \le k \le n)와 aa (1≤a≤1091 \le a \le 10^{9}, aa는 최종 리스트의 길이를 넘지 않는다)가 주어진다. 이는 과정으로 만들어진 리스트의 처음 aa개 원소에서 정수 kk가 몇 번 나타나는지 묻는 쿼리다.

출력

쿼리의 답을 입력에 주어진 순서대로 qq개 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    4 3 6
    1
    4
    3
    2
    1 6
    2 20
    4 1
    3 5
    2 9
    1 16
    
    예상 출력
    3
    6
    0
    1
    2
    8