#CF2078F. 二进制子序列权值和
二进制子序列权值和
F. 二进制子序列权值和
时间与内存限制
- 时间限制: 秒
- 内存限制: MB
定义
对于一个二进制字符串 ,定义它的得分为: 在所有 ()中,
的最大值。
其中函数 定义为:
$$F(v,l,r) = (r-l+1) - 2\cdot \operatorname{zero}(v,l,r) $$表示子串 中 的个数。 若 ,则 。
题目描述
给定一个长度为 的二进制字符串 ,以及 次询问。
每次询问给定一个位置 (),你需要翻转 :
- 变
- 变
每次翻转后,你需要求出: 当前 的所有非空子序列 的得分之和,答案对 取模。
修改是持久的,即每次翻转会保留到后续询问。
输入格式
第一行一个整数 (),表示测试用例组数。
每组数据:
- 第一行两个整数 ()。
- 第二行一个长度为 的二进制字符串 。
- 接下来 行,每行一个整数 ,表示翻转第 位。
保证所有测试用例的 与 均不超过 。
输出格式
对于每次询问,输出一行一个整数,表示所有非空子序列的得分之和对 取模的结果。
样例输入
3
3 2
010
1
3
10 3
0101000110
3
5
10
24 1
011001100110000101111000
24
样例输出
1
5
512
768
1536
23068672
样例解释(第一个测试用例)
第一次翻转后 。 枚举所有非空子序列并计算得分,总和为 。
第二次翻转后 。 各子序列得分分别为: ,总和为 。