#C1000. 能量回收

能量回收

题目描述

一条生产线上从左到右排列着 nn 个能量槽,第 ii 个能量槽初始存有 aia_i 单位能量。

回收系统可以执行若干次操作。每次操作时,控制器输入一个正整数 kk,系统会从左到右扫描所有能量槽,找到第一个当前能量不少于 kk 的能量槽(索引最小的位置),并从这个能量槽中回收 kk 单位能量。

为了保证生产线可以继续运行,所有操作结束后,每个能量槽中都必须至少剩下 11 单位能量。

你需要求出,在满足上述限制的前提下,最多能回收多少单位能量。

注意,每次操作选择的 kk 可以不同。

输入格式

输入的第一行包含一个正整数 nn,表示能量槽数量。

输入的第二行包含 nn 个正整数 a1,a2,,ana_1,a_2,\ldots,a_n,表示每个能量槽的初始能量。

输出格式

输出一行一个整数,表示最多能回收的能量总量。

样例 1 输入

4
1 4 2 3

样例 1 输出

3

样例 1 解释

一种最优方案是输入 k=3k=3。系统会从左到右找到第一个能量不少于 33 的能量槽,也就是第 22 个能量槽,并回收 33 单位能量。此时所有能量槽仍至少剩下 11 单位能量。

样例 2 输入

6
1 2 2 3 4 2

样例 2 输出

0

样例 2 解释

无论怎样选择第一次操作的 kk,只要成功回收了正数能量,就会导致之后无法保证所有能量槽最终至少剩下 11 单位能量。因此答案为 00

样例 3

见选手目录下的 reserve/reserve3.inreserve/reserve3.ans

该样例满足子任务 11 的约束条件。

样例 4

见选手目录下的 reserve/reserve4.inreserve/reserve4.ans

该样例满足子任务 22 的约束条件。

样例 5

见选手目录下的 reserve/reserve5.inreserve/reserve5.ans

该样例满足子任务 33 的约束条件。

样例 6

见选手目录下的 reserve/reserve6.inreserve/reserve6.ans

该样例满足子任务 44 的约束条件。

样例 7

见选手目录下的 reserve/reserve7.inreserve/reserve7.ans

该样例满足子任务 55 的约束条件。

样例 8

见选手目录下的 reserve/reserve8.inreserve/reserve8.ans

该样例满足子任务 66 的约束条件。

样例 9

见选手目录下的 reserve/reserve9.inreserve/reserve9.ans

该样例满足子任务 77 的约束条件。

数据范围

对于所有测试数据,均有:

  • 1n1061 \le n \le 10^6
  • 1ai1091 \le a_i \le 10^9
子任务编号 分值 约束条件
11 44 n=2n=2
22 88 n=3n=3
33 77 ai2a_i\le 2
44 1313 ai3a_i\le 3
55 77 10ai10\le a_i
66 1919 n,ai1000n,a_i\le 1000
77 4242 无额外限制

本题采用捆绑测试。每个子任务内的测试点必须全部通过,才能获得该子任务分数。