#CF1984C2. 大小(困难版)
大小(困难版)
C2. 大小(困难版)
- 时间限制:每个测试点 秒
- 内存限制:每个测试点 兆字节
本题的简单版和困难版有所不同。建议你阅读两个版本。只有两个版本都通过时,你才能进行hack。
给定一个长度为 的数组 。初始时 。然后,对于 从 到 (按递增顺序),恰好执行以下操作之一:
- 选项 1:将 变为 。
- 选项 2:将 变为 ,其中 表示 的绝对值。
设上述过程结束后 可能达到的最大值为 。求有多少种不同的操作序列使得最终 。如果两个操作序列在某一个下标 处一个选择了选项 1 而另一个选择了选项 2(即使在该步之后 的值相等),则认为它们不同。
由于答案可能很大,请对 取模后输出。
输入
第一行包含一个整数 ()——测试用例的数量。
每个测试用例的第一行包含一个整数 ()。
每个测试用例的第二行包含 个整数 ()。
所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一个整数 —— 使得最终 的不同操作序列的数量,对 取模。
示例
输入
5
4
2 -5 3 -3
8
1 4 3 4 1 4 3 4
3
-1 -2 -3
4
-1000000000 1000000000 1000000000 1000000000
4
1 9 8 4
输出
12
256
1
8
16
注
在第一个测试用例中,可以证明最大可能的最终 值为 。有 种操作序列可以达到 ,因为为了得到 ,我们必须在索引 或 处(或两者都)取绝对值,这有 种方式。对于另外两个索引,无论取绝对值还是不取,都不会改变 的值,因此它们各有 种方式。总共 种方式。
在第二个测试用例中,取绝对值永远不会改变任何值,因此对于每个索引,我们可以选择取绝对值或不取。这给出 种可能的方式。