D. 修补围栏

    传统题 1000ms 256MiB

修补围栏

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

修补围栏

题目描述

你要修理一段由 nn 块竖直木板组成的围栏,第 ii 块木板的高度为 hih_i

为了美观,你需要选择一段长度恰好为 kk连续区间,并将区间内所有木板的高度变为完全一致

你可以执行以下操作:

  1. 增加高度:你可以花费 1 金币将某块木板的高度增加 1。你可以无限次执行此操作,但不能降低木板高度。
  2. 使用“万能木板”:在选定区间并开始修补之前,你必须且只能选择区间内的一块木板,将其移除,并换上一块“万能木板”。万能木板的高度可以由你指定为任意正整数(此替换操作不消耗金币)。

目标:选择一个最佳的区间和最佳的替换策略,使得将该区间(含万能木板)所有 kk 块木板变为同一高度的总花费最小

输入格式

第一行包含两个整数 nnkk (2kn21052 \le k \le n \le 2 \cdot 10^5)。

第二行包含 nn 个整数 h1,h2,,hnh_1, h_2, \dots, h_n (1hi1091 \le h_i \le 10^9)。

输出格式

输出一个整数,表示最小的总花费。

输入输出样例 #1

输入 #1

5 3
1 10 2 3 5

输出 #1

1

说明/提示

样例解释

我们可以选择最后三个木板组成的区间 [2, 3, 5](下标 3 到 5)。

在该区间内,我们需要使所有木板高度一致。

策略如下:

  1. 替换:选择区间内高度为 5 的木板(最大值),将其替换为万能木板。
  2. 此时区间剩余的原始木板为 {2, 3}
  3. 为了花费最小,我们将目标高度设为剩余木板的最大值,即 3
  4. 设定万能木板:将万能木板的高度直接设为 3(花费 0)。
  5. 修补:将原本高度为 2 的木板加高到 3(花费 1)。
  6. 最终区间变为 [3, 3, 3],总花费为 11

(注:若选择区间 [1, 10, 2],移除 10,剩余 {1, 2},目标设为 2,花费也是 1,结果依然最小。)

子任务 分值 数据范围
151 \sim 5 1010 2n200,2 \le n \le 200, 2kn,1hi103 \quad 2 \le k \le n, \quad 1 \le h_i \le 10^3
6126 \sim 12 2020 2n5000,2 \le n \le 5000, 2kn,1hi109 \quad 2 \le k \le n, \quad 1 \le h_i \le 10^9
131813 \sim 18 3030 2n5×104,2 \le n \le 5\times 10^4, 2kn,1hi109 \quad 2 \le k \le n, \quad 1 \le h_i \le 10^9
192519 \sim 25 4040 2n2×105,2 \le n \le 2\times 10^5, 2kn,1hi109 \quad 2 \le k \le n, \quad 1 \le h_i \le 10^9

【睿爸信奥】入门组算法周赛(20260208)

未参加
状态
已结束
规则
IOI
题目
4
开始于
2026-2-8 0:00
结束于
2026-2-13 20:00
持续时间
3.5 小时
主持人
参赛人数
21