题目描述
给定一个长度为 n 的数列 A 以及常数 C,你需要将其划分成若干段,然后我们依次取出每一段的段内最大值,设这样得到的序列为 B,你划分的段数为 m。
你需要最大化:
i=2∑m((Bi−Bi−1)2+C)
形式化的说:对于数列 A,你需要选择若干个下标 1≤p1<p2<…<pm−1<n,
设 B1 为数列 A 中区间 [1,p1] 的最大值,对于 j∈[2,m−1],Bj 为数列 A 中区间 [pj−1+1,pj] 的最大值,Bm 为数列 A 中区间 [pm−1+1,n] 中的最大值。
你需要最大化:
i=2∑m((Bi−Bi−1)2+C)
特别的,如果你划分出的段数仅有 1 段,则答案为 0。
输入格式
从文件 array.in
中读入数据。
第一行两个整数分别表示 n,C。
接下来一行 n 个正整数,第 i 个正整数表示 Ai。
输出格式
输出到文件 array.out
中。
一行一个非负整数,表示答案。
样例
样例 1
5 3
10 1 2 3 5
103
样例 2
见下发文件中的 array/array2.in
与 array/array2.ans
。
样例 3
见下发文件中的 array/array3.in
与 array/array3.ans
。
样例 4
见下发文件中的 array/array4.in
与 array/array4.ans
。
数据规模与约定
对于所有数据:2≤n≤106,1≤Ai≤106,0≤C≤1010。
测试点编号 |
n |
特殊性质 |
1 |
≤100 |
保证 Ai≤103 |
2 |
3 |
≤500 |
无 |
4 |
5 |
≤2×103 |
6 |
≤5×103 |
7 |
≤2×105 |
8 |
9 |
≤106 |
保证 A 数列单调不降 |
10 |
无 |