CF2077C.Binary Subsequence Value Sum

提高+/省选-

通过率:0%

AC君温馨提醒

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

题目描述

Last | Moment - onoken

对于一个二进制字符串 ∗^{\text{∗}} vv,其分数定义为以下值的最大值:

max⁡0≤i≤∣v∣[F(v,1,i)⋅F(v,i+1,∣v∣)]\max_{0 \leq i \leq |v|} \left[ F(v, 1, i) \cdot F(v, i+1, |v|) \right]

其中 F(v,l,r)=r−l+1−2⋅zero⁡(v,l,r)F(v, l, r) = r - l + 1 - 2 \cdot \operatorname{zero}(v, l, r),这里 zero⁡(v,l,r)\operatorname{zero}(v, l, r) 表示子串 vlvl+1…vrv_lv_{l+1}\ldots v_r 中 0\mathtt{0} 的数量。若 l>rl > r,则 F(v,l,r)=0F(v, l, r) = 0。

给定一个长度为 nn 的二进制字符串 ss 和一个正整数 qq。你需要处理 qq 次修改查询。

每次查询给出一个整数 ii(1≤i≤n1 \leq i \leq n),你必须翻转 sis_i(将 0\mathtt{0} 改为 1\mathtt{1} 或 1\mathtt{1} 改为 0\mathtt{0})。每次修改后,计算 ss 所有非空子序列 †^{\text{†}} 的分数之和。

由于结果可能很大,请输出对 998 244 353998\,244\,353 取模后的答案。注意所有修改是持久化的。

∗^{\text{∗}} 二进制字符串是仅由 0\mathtt{0} 和 1\mathtt{1} 组成的字符串。

†^{\text{†}} 二进制字符串 xx 是 yy 的子序列,当且仅当 xx 可以通过删除 yy 中的若干字符(可能为零或全部)得到。

输入格式

每个测试包含多个测试用例。第一行输入测试用例数量 tt(1≤t≤1041 \le t \le 10^4)。接下来描述每个测试用例。

每个测试用例的第一行包含两个整数 nn 和 qq(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5,1≤q≤2⋅1051 \leq q \leq 2 \cdot 10^5)—— 分别表示字符串 ss 的长度和修改查询的数量。

第二行输入一个长度为 nn 的二进制字符串 ss,由字符 0\mathtt{0} 和 1\mathtt{1} 组成。

接下来 qq 行每行输入一个整数 ii(1≤i≤n1 \leq i \leq n),表示需要翻转 sis_i 的值。

保证所有测试用例的 nn 之和与 qq 之和均不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,输出 qq 行,每行一个整数,表示修改后所有非空子序列的分数之和模 998 244 353998\,244\,353 的结果。

输入输出样例

  • 输入#1

    3
    3 2
    010
    1
    3
    10 3
    0101000110
    3
    5
    10
    24 1
    011001100110000101111000
    24

    输出#1

    1
    5
    512
    768
    1536
    23068672

说明/提示

示例解释

第一个测试用例中,首次修改后 s=110s = \texttt{110}。所有子序列的分数计算如下:

索引 子序列 分数
1 1 0
2 1 0
1, 2 11 1
3 0 0
1, 3 10 0
2, 3 10 0
1, 2, 3 110 0

总和为 0+0+1+0+0+0+0=10 + 0 + 1 + 0 + 0 + 0 + 0 = 1。

第二次修改后 s=111s = \texttt{111}。所有子序列的分数计算如下:

索引 子序列 分数
1 1 0
2 1 0
1, 2 11 1
3 1 0
1, 3 11 1
2, 3 11 1
1, 2, 3 111 2

总和为 0+0+1+0+1+1+2=50 + 0 + 1 + 0 + 1 + 1 + 2 = 5。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页