#CF2079D. 可爱子序列

    ID: 6383 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>动态规划贪心数据结构单调队列线段树单调栈其他分块

可爱子序列

可爱子序列

  • 输入文件:标准输入
  • 输出文件:标准输出
  • 时间限制:1 秒
  • 内存限制:256 MB

题目描述

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

设第 ii 个子序列包含的元素下标为 j1<j2<<jlj_1 < j_2 < \ldots < j_l
该子序列的定义为:

maxm=1l(ajm+m)\max_{m=1}^{l} (a_{j_m} + m)

将数组划分为 kk 个子序列的代价等于这些子序列的值之和。

请你求出划分的最大代价


输入格式

第一行包含两个正整数 nnkk1kn5000001 \le k \le n \le 500\,000)——数组的长度以及需要划分成的子序列个数。

第二行包含 nn 个正整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9)——数组中的元素。


输出格式

输出一个整数——将给定数组划分为 kk 个非空子序列所能获得的最大代价。


示例

标准输入

5 3
3 7 10 1 2

标准输出

24

示例解释

在示例中,可以将数组划分为:
[3,10][3, 10][7][7][1,2][1, 2]
则答案为:

  • 子序列 [3,10][3, 10]m=1m = 1aj1+1=3+1=4a_{j_1} + 1 = 3 + 1 = 4m=2m = 2aj2+2=10+2=12a_{j_2} + 2 = 10 + 2 = 12,最大值 1212
  • 子序列 [7][7]m=1m = 17+1=87 + 1 = 8,最大值 88
  • 子序列 [1,2][1, 2]m=1m = 11+1=21 + 1 = 2m=2m = 22+2=42 + 2 = 4,最大值 44

总代价 12+8+4=2412 + 8 + 4 = 24


评分规则

测试数据分为 66 组。只有通过某组的所有测试以及它所依赖的前若干组的所有测试,才能获得该组分数。

组号 分值 额外限制 依赖组 备注
0 示例
1 14 n8n \le 8 0
2 19 k=2k = 2
3 17 ai+1aia_{i+1} \le a_i(非递增)
4 21 ai+1ai1a_{i+1} \ge a_i - 1
5 15 n1000n \le 1000 0, 1
6 14 0–5