만드는 중입니다

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

로켓

시간 제한1초메모리 제한1024 MB

요약
서로 다른 값 N개로 된 배열을 K개의 연속 구간으로 나눌 때, 각 구간 안의 역순쌍 수의 합이 최소가 되는 값을 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 분할 정복, 배열
정답자
아직 제출이 없습니다

문제

화성인들이 새로운 우주 로켓을 만들고 있다. 로켓은 한 줄로 늘어선 NN개의 모듈로 이루어지며, 앞에서부터 1…N1 \ldots N까지 순서대로 번호가 붙어 있다. 모듈 ii에는 AiA_i리터의 연료가 들어가며, 모든 모듈의 용량은 서로 다르다.

모듈은 KK개의 단계로 묶어야 한다. 각 단계는 연속된 모듈 한 개 이상으로 이루어지고, 모든 모듈은 정확히 한 단계에만 속한다. 즉, 배열 AA를 비어 있지 않은 연속 구간 KK개로 나눠야 한다.

마지막 순간에 로켓이 가장 빨리 난다는 사실이 밝혀졌다. 각 단계 안에서 모듈이 용량의 오름차순으로 정렬되어 있을 때다. 모듈은 크고 무거워서 인접한 두 모듈을 맞바꾸는 데 한 시간이 걸리고, 서로 이웃하지 않은 모듈끼리는 맞바꿀 수 없다.

각 단계의 모듈이 용량 오름차순이 되도록 KK개의 단계로 나눌 수 있게 하는 최소 교환 횟수를 구하는 프로그램을 작성하라.

입력

첫 줄에는 모듈의 개수 NN과 로켓 단계의 개수 KK가 공백으로 구분되어 주어진다(1≤K≤N≤20001 \le K \le N \le 2000).

둘째 줄에는 번호 순서대로 모듈의 용량 AiA_i가 공백으로 구분되어 NN개 주어진다(1≤Ai≤1091 \le A_i \le 10^9). 모든 AiA_i는 서로 다르다.

출력

모듈을 재배열하는 데 드는 최소 시간을 정수 하나로 출력한다. 시간 단위는 시간이다.

예제3

  1. 예제 1

    입력
    10 3
    9 30 45 2 5 7 10 3 16 22
    
    예상 출력
    0
    
  2. 예제 2

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

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