트리 경로의 k번째 작은 가중치

두 정점 사이의 유일한 트리 경로에서 k번째로 작은 정점 가중치를 각 질의마다 출력한다.

어려움8트리이분 탐색누적 합구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정점이 NN개인 트리가 있다. 트리는 사이클이 없는 연결 무방향 그래프이다. 정점 번호는 1번부터 NN번까지이고, 간선 번호는 1번부터 N1N-1번까지이다. 각 정점에는 가중치가 하나씩 붙어 있다.

다음 쿼리를 처리하는 프로그램을 작성하시오.

  • u v k: 정점 uu에서 정점 vv로 가는 경로 위에 있는 정점의 가중치 중 kk번째로 작은 값을 출력한다.

트리에서 두 정점을 잇는 경로는 하나뿐이고, 그 경로에는 양 끝 정점 uuvv도 포함된다. 같은 가중치가 여러 정점에 나오면 나온 횟수만큼 따로 세어 순위를 매긴다. 예를 들어 경로 위의 가중치가 3, 7, 7, 9라면 2번째로 작은 값과 3번째로 작은 값은 모두 7이다.

입력

첫째 줄에 정점의 개수 NN이 주어진다. (2N100,0002 \le N \le 100{,}000)

둘째 줄에 1번 정점부터 NN번 정점까지의 가중치가 순서대로 주어진다. 가중치는 1,000,0001{,}000{,}000보다 작거나 같은 자연수이다.

셋째 줄부터 N1N-1개의 줄에 ii번 간선이 잇는 두 정점의 번호 uuvv가 주어진다.

다음 줄에 쿼리의 개수 MM이 주어진다. (1M100,0001 \le M \le 100{,}000)

다음 MM개의 줄에 쿼리가 한 줄에 하나씩 u v k 형식으로 주어진다. uuvv는 정점 번호이고 서로 같아도 된다. kkuu에서 vv로 가는 경로 위의 정점 개수보다 크지 않은 자연수이다.

출력

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