K번째 수

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

어떤 배열의 특정 구간을 정렬한 뒤, 그 안에서 지정된 순위의 값을 구하는 함수를 만들려고 합니다.

크기가 nn인 배열 a[1n]a[1 \dots n]에는 서로 다른 정수 nn개가 저장되어 있습니다. 이 배열에 대해 다음과 같은 함수 Q(i,j,k)Q(i, j, k)를 정의합니다.

Q(i,j,k)Q(i, j, k): 부분 배열 a[ij]a[i \dots j]를 오름차순으로 정렬했을 때 kk번째로 작은 값을 반환하는 함수

예를 들어 a=(1,5,2,6,3,7,4)a = (1, 5, 2, 6, 3, 7, 4)일 때 Q(2,5,3)Q(2, 5, 3)을 계산해 봅시다. a[25]a[2 \dots 5](5,2,6,3)(5, 2, 6, 3)이고, 이를 정렬하면 (2,3,5,6)(2, 3, 5, 6)이 됩니다. 정렬된 배열에서 3번째 값은 5이므로 Q(2,5,3)=5Q(2, 5, 3) = 5입니다.

배열 aa와 여러 개의 질의 Q(i,j,k)Q(i, j, k)가 주어질 때, 각 질의의 반환값을 출력하는 프로그램을 작성하세요.

입력

첫째 줄에 배열의 크기 nn과 질의의 개수 mm이 공백으로 구분되어 주어집니다. (1n100,0001 \le n \le 100{,}000, 1m5,0001 \le m \le 5{,}000)

둘째 줄에 배열의 원소 nn개가 순서대로 주어집니다. 각 원소는 절댓값이 10910^9 이하인 정수이며, 모든 원소는 서로 다릅니다.

이어지는 mm개의 줄에 각 질의의 인자 ii, jj, kk가 주어집니다. (1ijn1 \le i \le j \le n, 1kji+11 \le k \le j - i + 1)

출력

각 질의마다 Q(i,j,k)Q(i, j, k)의 반환값을 한 줄에 하나씩 출력합니다.