CF1197C Array Splitting

题目描述

给定一个有序数组 $a_1, a_2, \dots, a_n$(对于每个 $i > 1$,都有 $a_i \ge a_{i-1}$),以及一个整数 $k$。 你需要将该数组划分为 $k$ 个非空连续子数组。数组中的每个元素必须且只能属于一个子数组。 设第 $i$ 个子数组的最大值为 $max(i)$,最小值为 $min(i)$。划分的代价定义为 $\sum\limits_{i=1}^{k} (max(i) - min(i))$。例如,若 $a = [2, 4, 5, 5, 8, 11, 19]$,将其划分为 $3$ 个子数组:$[2, 4], [5, 5], [8, 11, 19]$,则划分代价为 $(4 - 2) + (5 - 5) + (19 - 8) = 13$。 请计算将数组 $a$ 划分为 $k$ 个非空连续子数组所能得到的最小代价。

输入格式

第一行包含两个整数 $n$ 和 $k$($1 \le k \le n \le 3 \cdot 10^5$)。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^9$,$a_i \ge a_{i-1}$)。

输出格式

输出将数组 $a$ 划分为 $k$ 个非空连续子数组所能得到的最小代价。

说明/提示

在第一个测试样例中,可以将数组 $a$ 划分为:$[4, 8, 15, 16], [23], [42]$。 由 ChatGPT 4.1 翻译