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

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

단조 부분수열 길이 맞추기

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

요약
1부터 N까지 숫자로 가장 사전 순으로 앞선 순열을 만들되 가장 긴 증가 또는 감소 부분 수열 길이가 정확히 K가 되게 하고 불가능하면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
조합론, 그리디, 수학
정답자
아직 제출이 없습니다

문제

가장 긴 단조 부분수열을 찾는 문제는 잘 알려져 있다. 이번에는 방향을 뒤집어 수열을 직접 만든다.

NN과 KK가 주어질 때, 11부터 NN까지의 수가 각각 정확히 한 번씩 나오고 가장 긴 단조 부분수열의 길이가 정확히 KK인 수열을 구한다. 단조 부분수열은 증가 부분수열과 감소 부분수열을 함께 이른다.

부분수열은 원래 수열에서 순서를 유지한 채 원소를 골라 만든 수열이며, 고른 원소가 서로 이웃할 필요는 없다. 증가 부분수열은 값이 계속 커지고, 감소 부분수열은 값이 계속 작아진다.

입력

첫째 줄에 수열의 길이 NN과 요구되는 가장 긴 단조 부분수열의 길이 KK가 공백 하나로 구분되어 주어진다. (1≤K≤N≤1061 \le K \le N \le 10^6)

출력

조건을 만족하는 수열이 없으면 첫째 줄에 −1-1을 출력한다.

조건을 만족하는 수열이 있으면 그런 수열 가운데 사전순으로 가장 앞서는 것 하나를 첫째 줄에 출력한다. 수 NN개를 공백 하나로 구분해 한 줄에 적는다.

두 수열의 사전순 비교는 값이 처음으로 달라지는 위치를 찾아, 그 위치의 수가 작은 쪽을 앞선 것으로 본다.

힌트

N=4N = 4, K=3K = 3인 경우 (1,4,2,3)(1, 4, 2, 3)도 조건을 만족한다. 이 수열에서 가장 긴 단조 부분수열은 (1,2,3)(1, 2, 3)이고 길이는 33이다. 조건을 만족하는 수열 중 사전순으로 가장 앞서는 것은 (1,2,4,3)(1, 2, 4, 3)이므로 답은 이 수열이다.

예제3

  1. 예제 1

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

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

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