각 카드가 아래에 있는 거짓 카드 수가 a_i 이상이라고 주장할 때, 거짓 카드가 정확히 K장이 되도록 N장을 배치한다. 문제에서 정한 순서로 출력하고 불가능하면 -1을 출력한다.
보통6그리디정렬구현수학면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB
문제 설명
예제3
문제
카드 N장으로 이루어진 덱이 있다. i번째 카드에는 "이 카드보다 아래에 있는 카드 중 거짓인 카드가 ai장 이상이다"라는 주장이 적혀 있다.
카드를 한 줄로 쌓으면 각 카드의 주장이 실제 상황과 맞는지 따질 수 있다. 주장이 맞는 카드는 참이고, 맞지 않는 카드는 거짓이다. 한 카드가 참인지 거짓인지는 그 카드보다 아래에 놓인 거짓 카드의 개수로만 정해진다.
거짓인 카드가 정확히 K장이 되도록 N장을 모두 쌓는 순서를 구하라. 그런 순서가 아예 없을 수도 있다.
입력
첫째 줄에 정수 N과 K가 주어진다. (1≤N≤5×105, 0≤K≤N)
다음 N개 줄에 정수 ai가 한 줄에 하나씩 주어진다. (0≤ai≤5×105)
출력
조건을 만족하는 순서가 여럿일 수 있으므로 답은 다음 규칙으로 하나만 정한다.
카드에 적힌 수 N개를 오름차순으로 정렬한다. 작은 쪽 N−K개를 그 오름차순 그대로 덱의 위쪽에 놓고, 남은 K개를 내림차순으로 그 아래에 이어 놓는다. 이렇게 만든 덱의 거짓 카드가 정확히 K장이면 덱의 맨 위 카드부터 맨 아래 카드까지 N개의 수를 공백으로 구분해 한 줄에 출력한다. 그렇지 않으면 -1을 출력한다.
거짓 카드가 정확히 K장인 순서가 하나라도 있으면 이 덱이 반드시 그런 순서 중 하나다.
힌트
참과 거짓은 덱의 아래쪽부터 따지면 된다. 위에서 아래로 0, 1, 3, 3, 2를 놓은 덱을 보자.
맨 아래 카드는 2인데 그 아래에는 거짓 카드가 0장이므로 주장이 맞지 않아 거짓이다. 그 위 카드는 3이고 아래에 거짓 카드가 1장뿐이므로 거짓이다. 그 위 카드는 3이고 아래에 거짓 카드가 2장이므로 거짓이다. 그 위 카드는 1이고 아래에 거짓 카드가 3장이므로 참이다. 맨 위 카드는 0이므로 참이다. 이 덱의 거짓 카드는 모두 3장이다.