CFCF2180G.Balance

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述

你有一个最初为空的数组 aa。你需要对该数组处理 qq 个如下类型的操作:

  • 操作 1:删除 aa 的中间元素。具体来说,假设 aann 个元素,移除第 n2\lceil \frac{n}{2} \rceil 个元素,并将剩余部分拼接。保证在给出此操作时 aa 非空。
  • 操作 2:在 aa 的首、尾以及每两个相邻元素之间插入 xx。具体来说,如果操作前 a=[a1,a2,,an]a = [a_1, a_2, \ldots, a_n],那么操作后 a=[x,a1,x,a2,x,,x,an,x]a = [x, a_1, x, a_2, x, \ldots, x, a_n, x]
  • 操作 3:输出 aa 当前所有 2L12^L - 1 个非空子序列的平衡值之和,其中 LL 表示 aa 当前的长度。保证每次处理此操作时 LL 不会为 109+710^9+7 的倍数。

数组 b=[b1,b2,,bm]b = [b_1, b_2, \ldots, b_m] 的平衡值定义为

balance(b)=1b1+2b2++mbmm.\text{balance}(b) = \frac{1 \cdot b_1 + 2 \cdot b_2 + \ldots + m \cdot b_m}{m}.

^{\text{∗}} k\lceil k \rceil 表示 kk 向上取整,即不小于 kk 的最小整数。

^{\text{†}} 如果 bb 可以通过从 aa 的任意位置删除若干(可以为零或全部)元素得到,则 bbaa 的一个子序列。若删除元素的下标集合不同,则两个子序列被视为不同。

输入格式

每个测试点包含多组测试数据。首行为测试数据组数 tt1t1041 \le t \le 10^4)。接下来是各组测试数据的描述。

每组测试数据的第一行为一个整数 qq2q1062 \leq q \leq 10^6),表示操作数。随后 qq 行,每行描述一个操作:

  • 类型 1 的操作形如 1,即删除 aa 的中间元素。保证此时 aa 非空。
  • 类型 2 操作为 2 x,其中 xx 是要插入的整数,1x1091 \le x \le 10^9
  • 类型 3 操作为 3,即输出 aa 的所有非空子序列的平衡值之和。保证此时 aa 的长度 LL 不会是 109+710^9+7 的倍数。

另保证每组测试数据至少包含一个类型 3 请求,所有测试数据中 qq 的总和不超过 10610^6

输出格式

对每个类型 3 的查询,输出所求平衡值之和。

具体来说,设 M=109+7M = 10^9+7。可以证明,最终答案可表示为最简分数 PQ\frac{P}{Q},其中 P,QP,Q 为整数,且 Q≢0(modM)Q \not\equiv 0 \pmod{M}。你需要输出 PQ1modMP \cdot Q^{-1} \bmod M,即输出一个 xx,满足 0x<M0 \le x < MxQP(modM)x \cdot Q \equiv P \pmod{M}

输入输出样例

  • 输入#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

说明/提示

在第一个测试用例中,初始时数组 aa 为空。

第一次操作结束后,数组为 [1][1]

第二次操作后,数组为 [2,1,2][2,\, 1,\, 2]

第三次操作时,aa 的子序列及其平衡值如下:

  • 子序列 [1][1] 的平衡值为

    111=1;\frac{1 \cdot 1}{1} = 1;

  • 两个 [2][2] 子序列,各自平衡值

    121=2;\frac{1 \cdot 2}{1} = 2;

  • 子序列 [1,2][1,\,2] 的平衡值

    11+222=52;\frac{1 \cdot 1 + 2 \cdot 2}{2} = \frac{5}{2};

  • 子序列 [2,1][2,\,1] 的平衡值

    12+212=2;\frac{1 \cdot 2 + 2 \cdot 1}{2} = 2;

  • 子序列 [2,2][2,\,2] 的平衡值

    12+222=3;\frac{1 \cdot 2 + 2 \cdot 2}{2} = 3;

  • 子序列 [2,1,2][2,\,1,\,2] 的平衡值

    12+21+323=103.\frac{1 \cdot 2 + 2 \cdot 1 + 3 \cdot 2}{3} = \frac{10}{3}.

因此,平衡值之和为

956.\frac{95}{6}.

第四次操作后,aa 变为 [2,2][2,\,2]

首页