CF2053I1.Affectionate Arrays (Easy Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

你是信的开头,诗的内容,童话的结尾。

—— ilem,《勾指起誓》

本题是简单版问题。两个版本的区别在于,此版本中你需要计算数组的最小长度。

Iris 珍视一个整数数组 a1,a2,,ana_1, a_2, \ldots, a_n。她知道这个数组有一个有趣的性质:所有元素的最大绝对值不超过所有元素的和,即 max(ai)ai\max(\lvert a_i\rvert) \leq \sum a_i

Iris 定义数组的无聊值为其最大子数组^{\text{∗}}和。

Iris 的生日即将到来,Victor 打算送她另一个数组 b1,b2,,bmb_1, b_2, \ldots, b_m 作为礼物。出于某些看似明显的原因,他决定数组 b1,b2,,bmb_1, b_2, \ldots, b_m 应满足以下条件:

  • a1,a2,,ana_1, a_2, \ldots, a_n 必须是 b1,b2,,bmb_1, b_2, \ldots, b_m 的子序列^{\text{†}}
  • 两个数组的和相同,即 i=1nai=i=1mbi\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i
  • 数组 bb 的无聊值尽可能小。
  • 在所有具有最小无聊值的数组中,数组 bb 的长度(即 mm)尽可能小。此时,Iris 将立刻理解他的心意!

即使有上述约束,可能的礼物仍然太多。因此 Victor 请你计算满足所有条件的数组 b1,b2,,bmb_1, b_2, \ldots, b_m 的长度 m\boldsymbol{m}。他承诺:如果你成功帮助他,他会与你分享 Iris 的生日蛋糕。

注意:由于输入规模较大,你可能需要针对此问题进行优化。

例如,在 C++ 中,只需在 main() 函数开头添加以下代码:

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

^{\text{∗}} 若数组 cc 可通过删除数组 dd 开头和末尾的若干(可能为零或全部)元素得到,则称 ccdd 的子数组。

^{\text{†}} 若序列 cc 可通过删除序列 dd 中任意位置的若干(可能为零或全部)元素得到,则称 ccdd 的子序列。

输入格式

每个测试包含多个测试用例。第一行输入一个整数 tt1t1051 \leq t \leq 10^5)—— 测试用例的数量。接下来是各测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n3×1061 \leq n \leq 3\times 10^6)—— 数组 a1,a2,,ana_1, a_2, \ldots, a_n 的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n109ai109-10^9 \leq a_i \leq 10^9)—— 初始数组。保证 max(ai)ai\max(\lvert a_i\rvert) \leq \sum a_i

保证所有测试用例的 nn 之和不超过 3×1063\times 10^6

输出格式

对每个测试用例,输出一行一个整数:满足条件的数组 bb 的长度 mm

输入输出样例

  • 输入#1

    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

    输出#1

    4
    6
    14
    25

说明/提示

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

第二个测试用例中,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],因此输出 6。

首页