가장 긴 단조 부분수열을 찾는 문제는 잘 알려져 있다. 이번에는 방향을 뒤집어 수열을 직접 만든다.
N과 K가 주어질 때, 1부터 N까지의 수가 각각 정확히 한 번씩 나오고 가장 긴 단조 부분수열의 길이가 정확히 K인 수열을 구한다. 단조 부분수열은 증가 부분수열과 감소 부분수열을 함께 이른다.
부분수열은 원래 수열에서 순서를 유지한 채 원소를 골라 만든 수열이며, 고른 원소가 서로 이웃할 필요는 없다. 증가 부분수열은 값이 계속 커지고, 감소 부분수열은 값이 계속 작아진다.
첫째 줄에 수열의 길이 N과 요구되는 가장 긴 단조 부분수열의 길이 K가 공백 하나로 구분되어 주어진다. (1≤K≤N≤106)
조건을 만족하는 수열이 없으면 첫째 줄에 −1을 출력한다.
조건을 만족하는 수열이 있으면 그런 수열 가운데 사전순으로 가장 앞서는 것 하나를 첫째 줄에 출력한다. 수 N개를 공백 하나로 구분해 한 줄에 적는다.
두 수열의 사전순 비교는 값이 처음으로 달라지는 위치를 찾아, 그 위치의 수가 작은 쪽을 앞선 것으로 본다.
N=4, K=3인 경우 (1,4,2,3)도 조건을 만족한다. 이 수열에서 가장 긴 단조 부분수열은 (1,2,3)이고 길이는 3이다. 조건을 만족하는 수열 중 사전순으로 가장 앞서는 것은 (1,2,4,3)이므로 답은 이 수열이다.