#CF2053I1. 深情数组(简单版)

深情数组(简单版)

I1. 深情数组(简单版)

单个测试点时间限制:3 秒 内存限制:512 MB

你是字母的起笔,是诗篇的行文,是童话的句点。 —— ilem, 勾指起誓

这是该题的简单版本。两个版本的区别在于:在这个版本中,你只需要计算数组的最小长度。只有当你解决了该题的所有版本时,你才可以进行 hack。

艾瑞斯很珍爱一个整数数组 a1,a2,,ana_1,a_2,\dots,a_n。她知道这个数组拥有一个有趣的性质:所有元素的绝对值的最大值,不超过数组所有元素的和,即

max(ai)i=1nai\max(|a_i|) \le \sum_{i=1}^n a_i

艾瑞斯定义一个数组的无聊值为该数组的最大子段和

艾瑞斯的生日快到了,维克托准备送她另一个数组 b1,b2,,bmb_1,b_2,\dots,b_m 作为礼物。出于一些看似显而易见的原因,他要求数组 bb 满足以下性质:

  1. 数组 a1,a2,,ana_1,a_2,\dots,a_nb1,b2,,bmb_1,b_2,\dots,b_m 的一个子序列
  2. 两个数组的和相等,即i=1nai=i=1mbi\sum_{i=1}^n a_i = \sum_{i=1}^m b_i
  3. 数组 bb无聊值尽可能小。
  4. 在所有满足无聊值最小的数组 bb 中,数组 bb 的长度 mm 尽可能小。

在这种情况下,艾瑞斯就能最快领会他的心意!

即使有以上约束,符合条件的礼物数组仍然有很多。所以维克托请你计算出满足所有条件的任意一个数组 bb 的长度 mm。他保证:如果你成功帮到他,他会分你一小块艾瑞斯的生日蛋糕。

注意:由于输入数据量较大,你可能需要对输入进行加速。 例如在 C++ 中,在 main 函数开头加入以下代码即可:

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
}

定义说明

  • * 数组 ccdd子段(subarray):如果从 dd 的开头删去若干(可以是 0 个)元素、末尾删去若干(可以是 0 个)元素后可以得到 cc
  • 序列 ccdd子序列(subsequence):如果从 dd 中任意位置删去若干(可以是 0 个)元素后可以得到 cc

输入格式

每个测试文件包含多组测试数据。 第一行输入一个整数 tt1t1051 \le t \le 10^5),表示测试用例数量。

每组测试用例描述如下:

  • 第一行包含一个整数 nn1n31061 \le n \le 3\cdot10^6),表示数组 aa 的长度。
  • 第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n109ai109-10^9 \le a_i \le 10^9)。 保证题目给定条件成立:max(ai)ai\max(|a_i|) \le \sum a_i

保证所有测试用例的 nn 之和不超过 31063\cdot10^6


输出格式

对于每组测试用例,输出一行一个整数,表示满足所有条件的合法数组 bb 的长度 mm


样例输入

4
4
1 2 3 4
4
2 -3 2 2
10
2 -7 6 3 -1 4 2 -5 8 -4
20
4 -2 4 3 -2 1 5 2 3 6 -5 -1 -4 -2 -3 5 -3 1 -4 1

样例输出

4
6
14
25

样例解释

在第一个测试用例中,a=[1,2,3,4]a = [1,2,3,4]。 满足所有条件的数组 bb 只能是 [1,2,3,4][1,2,3,4] 本身,因此输出 44

在第二个测试用例中,a=[2,3,2,2]a = [2,-3,2,2]。 满足条件的数组 bb 可以是 [1,2,3,2,1,2][1,2,-3,2,-1,2][2,1,3,2,1,2][2,1,-3,2,-1,2],因此输出 66