만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

가장 긴 증가하는 부분 수열 k

시간 제한0.25초메모리 제한512 MB

요약
서로 다른 정수 N개가 주어질 때, 가장 긴 증가 부분 수열 중 사전순으로 K번째 수열을 구합니다. 그런 수열이 K개보다 적으면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

N개의 정수로 이루어진 수열 A1,A2,…,ANA_1, A_2, \ldots, A_N에서, 가장 긴 증가하는 부분 수열(LIS)의 길이를 LL이라고 하자. LIS는 하나 또는 그 이상 있을 수 있다. 모든 LIS를 사전 순으로 정렬했을 때, KK번째 오는 수열을 구해보자.

두 LIS Ai1,Ai2,…,AiLA_{i_1}, A_{i_2}, \ldots, A_{i_L}과 Aj1,Aj2,…,AjLA_{j_1}, A_{j_2}, \ldots, A_{j_L}이 있을 때, ik≠jki_k \neq j_k를 만족하는 kk가 하나라도 존재하면 다른 LIS이다.

입력

첫째 줄에 NN과 KK가 주어진다. 둘째 줄에 공백으로 구분된 A1,A2,…,ANA_1, A_2, \ldots, A_N이 주어진다.

출력

KK번째 LIS를 공백으로 구분해서 출력한다. KK번째 LIS가 없을 때는 −1-1을 출력한다.

제한

  • 1≤N≤1051 \le N \le 10^5
  • 1≤K≤10181 \le K \le 10^{18}
  • 1≤Ai≤N1 \le A_i \le N
  • 수열 AA에는 중복되는 수가 없다.

예제5

  1. 예제 1

    입력
    5 1
    1 4 2 3 5
    
    예상 출력
    1 2 3 5
    
  2. 예제 2

    입력
    5 2
    1 4 2 3 5
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    6 1
    2 6 4 1 3 5
    
    예상 출력
    1 3 5
    
  4. 예제 4

    입력
    6 2
    2 6 4 1 3 5
    
    예상 출력
    2 3 5
    
  5. 예제 5

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