순열 CFG
시간 제한4초메모리 제한2048 MB
순열로 정의된 문맥 자유 문법의 확장을 n에서 시작해 s번 적용한 리스트에서, 정수 k가 앞부분에 몇 번 나오는지 묻는 질의에 답한다.
문제
정수 부터 까지의 순열을 생각하자. 이때 각 수 부터 을 문맥 자유 문법(CFG)의 비단말 기호로 본다. 각 수 는 부터 까지의 정수를 순열의 순서대로 나열한 리스트로 확장된다. 예를 들어 이고 순열이 라면:
이제 에서 시작해 각 단계마다 이 규칙을 적용해 정수의 새 리스트를 만드는 과정을 생각하자. 위 예에서 첫 단계에서는:
둘째 단계에서는:
셋째 단계에서는:
순열, 단계 수, 그리고 이 과정으로 만들어진 리스트의 접두사에서 특정 정수가 몇 번 나타나는지 묻는 쿼리 목록이 주어질 때, 모든 쿼리에 답하라.
입력
첫째 줄에 세 정수 (), (), ()가 주어진다. 은 순열의 크기, 는 과정을 적용하는 단계 수, 는 쿼리의 수다.
다음 개 줄에 각각 정수 ()가 하나씩 주어진다. 이는 순열을 순서대로 나열한 것이다. 모든 의 값은 서로 다르다.
다음 개 줄에 각각 두 정수 ()와 (, 는 최종 리스트의 길이를 넘지 않는다)가 주어진다. 이는 과정으로 만들어진 리스트의 처음 개 원소에서 정수 가 몇 번 나타나는지 묻는 쿼리다.
출력
쿼리의 답을 입력에 주어진 순서대로 개 줄에 하나씩 출력한다.