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 完成