CFCF2180G.Balance
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
你有一个最初为空的数组 a。你需要对该数组处理 q 个如下类型的操作:
- 操作 1:删除 a 的中间元素。具体来说,假设 a 有 n 个元素,移除第 ⌈2n⌉ 个元素,并将剩余部分拼接。保证在给出此操作时 a 非空。
- 操作 2:在 a 的首、尾以及每两个相邻元素之间插入 x。具体来说,如果操作前 a=[a1,a2,…,an],那么操作后 a=[x,a1,x,a2,x,…,x,an,x]。
- 操作 3:输出 a 当前所有 2L−1 个非空子序列的平衡值之和,其中 L 表示 a 当前的长度。保证每次处理此操作时 L 不会为 109+7 的倍数。
数组 b=[b1,b2,…,bm] 的平衡值定义为
balance(b)=m1⋅b1+2⋅b2+…+m⋅bm.
∗ ⌈k⌉ 表示 k 向上取整,即不小于 k 的最小整数。
† 如果 b 可以通过从 a 的任意位置删除若干(可以为零或全部)元素得到,则 b 是 a 的一个子序列。若删除元素的下标集合不同,则两个子序列被视为不同。
输入格式
每个测试点包含多组测试数据。首行为测试数据组数 t(1≤t≤104)。接下来是各组测试数据的描述。
每组测试数据的第一行为一个整数 q(2≤q≤106),表示操作数。随后 q 行,每行描述一个操作:
- 类型 1 的操作形如
1,即删除 a 的中间元素。保证此时 a 非空。 - 类型 2 操作为
2 x,其中 x 是要插入的整数,1≤x≤109。 - 类型 3 操作为
3,即输出 a 的所有非空子序列的平衡值之和。保证此时 a 的长度 L 不会是 109+7 的倍数。
另保证每组测试数据至少包含一个类型 3 请求,所有测试数据中 q 的总和不超过 106。
输出格式
对每个类型 3 的查询,输出所求平衡值之和。
具体来说,设 M=109+7。可以证明,最终答案可表示为最简分数 QP,其中 P,Q 为整数,且 Q≡0(modM)。你需要输出 P⋅Q−1modM,即输出一个 x,满足 0≤x<M 且 x⋅Q≡P(modM)。
输入输出样例
输入#1
2 5 2 1 2 2 3 1 3 10 2 33532 1 2 938556 2 559503 2 353115 3 1 3 1 3
输出#1
833333355 7 856804480 553793656 724179701
说明/提示
在第一个测试用例中,初始时数组 a 为空。
第一次操作结束后,数组为 [1]。
第二次操作后,数组为 [2,1,2]。
第三次操作时,a 的子序列及其平衡值如下:
- 子序列 [1] 的平衡值为
11⋅1=1;
- 两个 [2] 子序列,各自平衡值
11⋅2=2;
- 子序列 [1,2] 的平衡值
21⋅1+2⋅2=25;
- 子序列 [2,1] 的平衡值
21⋅2+2⋅1=2;
- 子序列 [2,2] 的平衡值
21⋅2+2⋅2=3;
- 子序列 [2,1,2] 的平衡值
31⋅2+2⋅1+3⋅2=310.
因此,平衡值之和为
695.
第四次操作后,a 变为 [2,2]。