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

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

K번째 수

시간 제한1초메모리 제한256 MB

요약
서로 다른 정수로 이루어진 배열과 m개의 구간 질의가 주어질 때, 각 구간에서 k번째로 작은 값을 구한다.
난이도

어려움10점 중 8점

유형
이분 탐색, 분할 정복, 정렬, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

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

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

Q(i,j,k)Q(i, j, k): 부분 배열 a[i…j]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[2…5]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이 공백으로 구분되어 주어집니다. (1≤n≤100,0001 \le n \le 100{,}000, 1≤m≤5,0001 \le m \le 5{,}000)

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

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

출력

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

예제1

  1. 예제 1

    입력
    7 3
    1 5 2 6 3 7 4
    2 5 3
    4 4 1
    1 7 3
    
    예상 출력
    5
    6
    3