트리 퀴즈
시간 제한4초메모리 제한1024 MB
루트가 있는 트리가 주어질 때, 모든 (x, y) 쌍의 LCA(x, y)로 만든 키 값을 정렬한 배열에서 질의마다 k번째 원소를 구합니다.
문제
친구가 퀴즈를 내려고 한다. 개의 노드로 이루어진 루트 트리가 주어지며, 노드는 부터 까지 번호가 매겨져 있다. 노드 의 부모는 노드 이고, 부모가 없는 루트는 이다. 노드 가 노드 의 조상이라는 것은 이거나, 가 의 부모의 조상인 경우(부모가 존재하는 경우에 한함)를 뜻한다.
노드 가 노드 와 의 공통 조상이라는 것은 가 와 모두의 조상이라는 뜻이다. 노드 가 와 의 최소 공통 조상이라는 것은, 가 와 의 공통 조상이면서 와 의 모든 공통 조상이 의 조상이기도 하다는 뜻이다. 와 의 최소 공통 조상을 로 나타낸다. 특히 이다.
친구는 아래 의사 코드를 실행하려고 한다.
let L be an empty array
for x = 1 to n
for y = 1 to n
append ((x - 1) * n * n + (LCA(x, y) - 1) * n + (y - 1)) to L
sort L in non-decreasing order
친구가 개의 질문을 던진다. 번째 질문에서는 정수 가 주어지며, 배열 의 번째 원소를 구해야 한다. 의 인덱스는 1부터 시작하므로 범위는 1 이상 이하이다. 퀴즈를 통과하려면 모든 질문에 답해야 한다.
입력
첫 줄에 두 정수 과 가 주어진다(, ). 둘째 줄에는 정수 이 주어진다(). 주어진 값은 루트 트리를 나타냄이 보장된다. 이어서 개의 줄에 정수가 하나씩 주어진다. 번째 줄에는 가 주어진다().
출력
질문 순서대로 각 질문의 답인 정수를 출력한다.