#CF2053I2. 深情数组(困难版)
深情数组(困难版)
I2. 深情数组(困难版)
单个测试点时间限制:3 秒 内存限制:512 MB
你是字母的起笔,是诗篇的行文,是童话的句点。 —— ilem, 勾指起誓
注意:本题题面与官方比赛中使用的版本不同。本题题面已修正为可解版本,在官方比赛中,该题的所有提交已被移除。
这是该题的困难版本。两个版本的区别在于:在这个版本中,你需要计算所有合法数组的价值之和。只有当你解决了该题的所有版本时,你才可以进行 hack。
题目描述
艾瑞斯很珍爱一个整数数组 。她知道这个数组拥有一个有趣的性质:所有元素的绝对值的最大值,不超过数组所有元素的和,即
艾瑞斯定义一个数组的无聊值为该数组的最大子段和。
艾瑞斯的生日快到了,维克托准备送她另一个数组 作为礼物。他要求数组 满足以下性质:
- 数组 是 的一个子序列。
- 两个数组的和相等,即 。
- 数组 的无聊值尽可能小。
- 在所有满足无聊值最小的数组 中,数组 的长度 尽可能小。
对于一个满足上述所有条件的数组 ,维克托定义该数组的价值为:数组 在 中作为子序列出现的次数。 即统计满足 且对所有 都有 的下标序列 的数量。
即使有以上约束,符合条件的数组 仍然有很多。请你计算所有合法数组 的价值之和,答案对 取模。
定义说明
子段 (subarray):数组 是数组 的子段,当且仅当从 的开头删去若干(可零)个元素、从末尾删去若干(可零)个元素后可以得到 。
子序列 (subsequence):序列 是序列 的子序列,当且仅当从 中任意位置删去若干(可零)个元素后可以得到 。
输入格式
输入包含多组测试数据。 第一行输入一个整数 (),表示测试用例数量。
每组测试用例:
- 第一行一个整数 (),表示数组 的长度。
- 第二行 个整数 ()。
- 保证满足约束:。
保证所有测试用例的 之和不超过 。
输出格式
对于每组测试用例,输出一行一个整数,表示所有合法数组 的价值之和,对 取模。
样例输入
5
4
1 2 3 4
4
2 -3 2 2
4
1 -2 2 1
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
2
2
20
1472
样例解释
-
第一组: 唯一合法数组 就是 本身,价值为 。
-
第二组: 合法 有两个: 和 。 每个 的价值都是 ,总和为 。
-
第三组: 唯一合法 是 。 在 中作为子序列出现 次,价值为 。