题目 20372

可爱的子序列

查看题解 ↗GitHub ↗如何评测
题号
20372
时间限制
1000 ms
内存限制
256 MB
标签
比赛CSP-S
来源
CSP-S 国外模拟赛 23 - T2

第 2 题 可爱的子序列 (cutesubsequences)

CSP-S 复赛模拟赛 23 · 时间限制 1 s · 空间限制 256 MB · 86 个测试点 · 特殊 Judge

本题使用文件输入输出:输入文件 cutesubsequences.in,输出文件 cutesubsequences.out。

题目描述

给定一个由 nn 个正整数组成的数组 a1,a2,…,ana_1, a_2, \ldots, a_n,以及一个正整数 kk。你需要把该数组划分成 kk 个非空子序列,使得数组中的每个元素恰好属于一个子序列。子序列是指从另一个序列中删去某些元素、不改变剩余元素顺序后得到的序列。

设第 ii 个子序列包含下标为 j1<…<jlj_1 < \ldots < j_l 的元素。该子序列的值定义为对所有 mm(1 到 ll)而言 ajm+ma_{j_m} + m 的最大值。

把数组划分成 kk 个子序列的代价是这些子序列的值之和。

求该划分的最大代价。

输入格式

第一行包含两个正整数 nn 和 kk(1≤k≤n≤500 0001 \le k \le n \le 500\,000)——数组的大小,以及要划分成的子序列个数。

第二行包含 nn 个正整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤1091 \le a_i \le 10^9)——数组的元素。

输出格式

输出把给定数组划分成 kk 个非空子序列的最大代价。

样例

样例 1

输入:

文本
5 3
3 7 10 1 2

输出:

文本
24

样例解释

在样例中,可以把数组划分成 [3,10][3, 10]、[7][7]、[1,2][1, 2]。此时答案为 (10+2)+(7+1)+(2+2)=12+8+4=24(10 + 2) + (7 + 1) + (2 + 2) = 12 + 8 + 4 = 24。

约束与子任务

本题的测试点分为六组。只有当该组的所有测试点以及所有所需组的测试点都通过时,该组的分数才会被计入。

组 分数 nn kk 所需组 备注
0 0 – – – 样例。
1 14 n≤8n \le 8 – 0
2 19 – k=2k = 2 –
3 17 – – – ai+1≤aia_{i+1} \le a_i
4 21 – – – ai+1≥ai−1a_{i+1} \ge a_i - 1
5 15 n≤1000n \le 1000 – 0, 1
6 14 – – 0–5

数据下载

题目 20372 的公开数据

正在读取文件列表…

常用命令

题目 20372 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。