실행 시간 제한 | 메모리 제한 |
---|---|
2 초 | 512 MB |
학교 선생님 미진은 아침 운동을 위해 학교 놀이터로 나가기 전에 ()명의 학생들을 번호순으로 정렬하려고 합니다. 번호는 편의상 으로 주어집니다.
현재 학생들은 순으로 줄을 서 있고, 미진은 번 학생 앞에 서있습니다. 그는 학생들이 순으로 정렬되도록 순서를 바꾸길 원하며, 이때 번 학생은 미진의 바로 옆에 있어야 합니다.
오늘 학생들은 조금 졸리기 때문에, 어느 시점에서든 지시에 주의를 기울이는 학생은 미진 바로 옆에 있는 학생뿐입니다. 한 시간 단계에서, 미진은 이 학생에게 줄에서 칸 (과 사이의 임의의 수) 아래로 이동하라고 지시할 수 있습니다. 이때, 이 학생이 지나치는 명의 학생들은 앞으로 걸어가면서 미진이 그 뒤에 줄에 끼어들 수 있는 공간을 확보합니다.
예를 들어, 이고 학생들이 다음과 같은 순서로 시작한다고 가정해봅시다:
미진 : 4, 3, 2, 1
미진에 주의를 기울이는 유일한 학생은 4번 학생입니다. 만약 4번 학생에게 줄에서 2칸 아래로 가라고 지시한다면, 이후의 순서는 다음과 같을 것입니다:
미진 : 3, 2, 4, 1
이제 미진에게 주의를 기울이는 유일한 학생은 3번 학생입니다. 그래서 두 번째 시간 단계에서 3번 학생에게 지시를 내릴 수 있고, 이런 식으로 학생들이 정렬될 때까지 계속됩니다.
미진은 자신의 아침 운동을 위해 빨리 돌아가려 하기 때문에 정렬을 얼마나 빨리 마칠 수 있을지 알고 싶습니다. 학생들을 최소한의 시간 단위로 정렬할 수 있는 지시 순서를 찾아주세요.
입력의 첫 번째 줄에는 이 주어집니다. 두 번째 줄에는 개의 공백으로 구분된 정수가 주어집니다: , 이는 학생의 초기 순서를 나타냅니다.
첫 번째 줄에는 학생를 정렬하는 데 필요한 최소한의 시간 단계를 나타내는 정수 가 주어져야 합니다.
두 번째 줄에는 개의 공백으로 구분된 정수 가 주어져야 합니다. 각각의 정수는 범위 에 속하며, 또한 번째 시간 단계에서 미진이 맞은 편에 서 있는 학생에게 만큼 줄을 따라 이동하도록 지시하면, 개의 시간 단계 후에 학생들은 정렬된 순서대로 있어야 합니다.
여러 개의 최적의 지시 순서가 있는 경우, 프로그램은 이 중 아무 것이나 출력할 수 있습니다.
4 1 2 4 3
3 2 2 3
출처: USACO 2019 January Contest, Gold Problem 2. Sleepy Cow Sorting