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