만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

버블-버블 정렬

시간 제한2초메모리 제한2048 MB

요약
버블 n개와 한 번에 정렬하는 창 크기 k가 주어질 때, 창 정렬을 반복해 전체가 정렬되기까지 걸리는 시간을 구합니다.
난이도

보통10점 중 6점

유형
배열, 수학
정답자
아직 제출이 없습니다

문제

거품! 거품은 완벽한 생명체라는 운동의 열성 지지자로서, 여러분은 모든 색과 크기의 거품을 많이 모아 왔습니다. 오랜 회원인 여러분의 거품은 세계 최고 수준이며, 이제 그것을 보여줄 때입니다. 내일 연례 거품 박람회가 열리고, 여러분의 목표는 거품 상을 받고 거품 챔피언이 되는 것입니다.

하지만 쉬운 대회가 아닙니다. 우승하려면 가장 아름다운 거품만으로는 부족하고, 거품을 가장 보기 좋게 배치해야 합니다. 여러분은 버블니스 순으로 거품을 정렬하기로 했습니다. 버블니스가 낮은 거품은 왼쪽에, 높은 거품은 오른쪽에 둡니다. 그런데 컬렉션의 거품을 한꺼번에 모두 비교하기는 어렵습니다. 실제로 눈으로는 최대 kk개의 거품만 비교할 수 있고, 그 이상이면 모든 거품을 놓치게 됩니다. 컬렉션의 거품이 kk개보다 많으므로, 더 나은 정렬 알고리즘이 필요합니다.

가장 먼저 떠오르는 방법은 거품 정렬에 가장 적합한 알고리즘인 버블 정렬입니다. 하지만 이 대회는 가장 권위 있는 거품 대회이므로 더 나은 방법을 택합니다. 바로 버블-버블 정렬입니다. 동작은 다음과 같습니다.

거품은 임의의 순서로 놓인 상태에서 시작합니다. 매시간 다음을 수행합니다. 먼저 처음 kk개의 거품을 보고 최적의 순서로 배치합니다. 그다음 2번째부터 k+1k+1번째 거품을 보고 올바른 순서로 배치합니다. 이후 3번째부터 k+2k+2번째 거품을 같은 방식으로 처리하고, 마지막 kk개의 거품을 올바른 순서로 배치할 때까지 이어갑니다. 그런 다음 다음 시간이 시작되기 전까지 지금까지의 거품 배열을 살펴보고, 다음 시간에는 다시 처음 거품부터 시작합니다.

이 알고리즘이 모든 거품을 충분히 빨리 배치하는지, 아니면 버블-버블-버블 정렬을 새로 고안해야 하는지 판단해야 합니다. 정확히는, 거품이 최적의 위치에 놓이는 데 몇 시간이 걸리는지 구하세요.

입력

한 줄에 두 정수 nn과 kk(2≤k<n≤25002 \leq k < n \leq 2500)가 주어집니다. nn은 거품의 개수이고, kk는 한 번에 정렬할 수 있는 거품의 개수입니다.

한 줄에 nn개의 정수 aa(0≤a≤1090 \leq a \leq 10^9)가 주어집니다. 이는 초기 배치에서 각 거품의 버블니스입니다.

출력

거품 컬렉션을 정렬하는 데 필요한 시간의 수를 출력합니다.

예제3

  1. 예제 1

    입력
    5 2
    3 4 1 5 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    8 3
    60 8 27 7 68 41 53 44
    
    예상 출력
    2
    
  3. 예제 3

    입력
    6 3
    3 2 4 2 3 1
    
    예상 출력
    3