버블-버블 정렬
시간 제한2초메모리 제한2048 MB
버블 n개와 한 번에 정렬하는 창 크기 k가 주어질 때, 창 정렬을 반복해 전체가 정렬되기까지 걸리는 시간을 구합니다.
문제
거품! 거품은 완벽한 생명체라는 운동의 열성 지지자로서, 여러분은 모든 색과 크기의 거품을 많이 모아 왔습니다. 오랜 회원인 여러분의 거품은 세계 최고 수준이며, 이제 그것을 보여줄 때입니다. 내일 연례 거품 박람회가 열리고, 여러분의 목표는 거품 상을 받고 거품 챔피언이 되는 것입니다.
하지만 쉬운 대회가 아닙니다. 우승하려면 가장 아름다운 거품만으로는 부족하고, 거품을 가장 보기 좋게 배치해야 합니다. 여러분은 버블니스 순으로 거품을 정렬하기로 했습니다. 버블니스가 낮은 거품은 왼쪽에, 높은 거품은 오른쪽에 둡니다. 그런데 컬렉션의 거품을 한꺼번에 모두 비교하기는 어렵습니다. 실제로 눈으로는 최대 개의 거품만 비교할 수 있고, 그 이상이면 모든 거품을 놓치게 됩니다. 컬렉션의 거품이 개보다 많으므로, 더 나은 정렬 알고리즘이 필요합니다.
가장 먼저 떠오르는 방법은 거품 정렬에 가장 적합한 알고리즘인 버블 정렬입니다. 하지만 이 대회는 가장 권위 있는 거품 대회이므로 더 나은 방법을 택합니다. 바로 버블-버블 정렬입니다. 동작은 다음과 같습니다.
거품은 임의의 순서로 놓인 상태에서 시작합니다. 매시간 다음을 수행합니다. 먼저 처음 개의 거품을 보고 최적의 순서로 배치합니다. 그다음 2번째부터 번째 거품을 보고 올바른 순서로 배치합니다. 이후 3번째부터 번째 거품을 같은 방식으로 처리하고, 마지막 개의 거품을 올바른 순서로 배치할 때까지 이어갑니다. 그런 다음 다음 시간이 시작되기 전까지 지금까지의 거품 배열을 살펴보고, 다음 시간에는 다시 처음 거품부터 시작합니다.
이 알고리즘이 모든 거품을 충분히 빨리 배치하는지, 아니면 버블-버블-버블 정렬을 새로 고안해야 하는지 판단해야 합니다. 정확히는, 거품이 최적의 위치에 놓이는 데 몇 시간이 걸리는지 구하세요.
입력
한 줄에 두 정수 과 ()가 주어집니다. 은 거품의 개수이고, 는 한 번에 정렬할 수 있는 거품의 개수입니다.
한 줄에 개의 정수 ()가 주어집니다. 이는 초기 배치에서 각 거품의 버블니스입니다.
출력
거품 컬렉션을 정렬하는 데 필요한 시간의 수를 출력합니다.