CF2053I1 Affectionate Arrays (Easy Version)

题目描述

你是信的开头,诗的内容,童话的结尾。 —— ilem,[《勾指起誓》](https://www.bilibili.com/video/BV1Jb411U7u2/) 本题是简单版问题。两个版本的区别在于,此版本中你需要计算数组的最小长度。只有当你解决了所有版本的问题时才能进行 hack 操作。 Iris 珍视一个整数数组 $a_1, a_2, \ldots, a_n$。她知道这个数组有一个有趣的性质:所有元素的最大绝对值不超过所有元素的和,即 $\max(\lvert a_i\rvert) \leq \sum a_i$。 Iris 定义数组的**无聊值**为其最大子数组$^{\text{∗}}$和。 Iris 的生日即将到来,Victor 打算送她另一个数组 $b_1, b_2, \ldots, b_m$ 作为礼物。出于某些看似明显的原因,他决定数组 $b_1, b_2, \ldots, b_m$ 应满足以下条件: - $a_1, a_2, \ldots, a_n$ 必须是 $b_1, b_2, \ldots, b_m$ 的子序列$^{\text{†}}$。 - 两个数组的和相同,即 $\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i$。 - 数组 $b$ 的无聊值尽可能小。 - 在所有具有最小无聊值的数组中,数组 $b$ 的长度(即 $m$)尽可能小。此时,Iris 将立刻理解他的心意! 即使有上述约束,可能的礼物仍然太多。因此 Victor 请你计算满足所有条件的数组 $b_1, b_2, \ldots, b_m$ 的长度 $\boldsymbol{m}$。他承诺:如果你成功帮助他,他会与你分享 Iris 的生日蛋糕。 注意:由于输入规模较大,你可能需要针对此问题进行优化。 例如,在 C++ 中,只需在 main() 函数开头添加以下代码: ```cpp int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); } ``` $^{\text{∗}}$ 若数组 $c$ 可通过删除数组 $d$ 开头和末尾的若干(可能为零或全部)元素得到,则称 $c$ 是 $d$ 的子数组。 $^{\text{†}}$ 若序列 $c$ 可通过删除序列 $d$ 中任意位置的若干(可能为零或全部)元素得到,则称 $c$ 是 $d$ 的子序列。

输入格式

输出格式

说明/提示

第一个测试用例中,$a=[1, 2, 3, 4]$。唯一满足所有条件的数组 $b$ 是 $[1, 2, 3, 4]$,因此输出 4。 第二个测试用例中,$a=[2, -3, 2, 2]$。可能的数组 $b$ 包括 $[1, 2, -3, 2, -1, 2]$ 和 $[2, 1, -3, 2, -1, 2]$,因此输出 6。 翻译由 DeepSeek R1 完成