「CF2077C」Binary Subsequence Value Sum

Description

Link:CF2077C

对于一个二进制字符串 vv,定义其分数为

max⁡0≤i≤∣v∣{F(v,1,i)×F(v,i+1,∣v∣)}\max_{0 \leq i \leq |v|} \{ F(v, 1, i) \times F(v, i + 1, |v|) \}

其中 F(v,l,r)=r−l+1−2×zero(v,l,r)F(v, l, r) = r - l + 1 - 2 \times \mathrm{zero}(v, l, r),这里 zero(v,l,r)\mathrm{zero}(v, l, r) 表示子串 v[l:r]v[l : r] 中 0 的数量。

给出一个长度为 nn 的二进制字符串 ss。

有 QQ 次操作,每次操作都会给出一个 ii (1≤i≤n1 \leq i \leq n),你需要将 sis_i 取反。每次操作结束后,你都需要求出 ss 的所有非空子序列的得分之和。答案对 998244353998244353 取模。

数据范围:1≤n≤2×1051 \leq n \leq 2 \times 10^5,1≤q≤2×1051 \leq q \leq 2 \times 10^5。

时空限制:33s / 256256MiB。

Solution

将字符 1 看成 +1+1,将字符 0 看成 −1-1,则 F(v,l,r)F(v, l, r) 即为区间 [l,r][l, r] 的权值之和。

考虑式子

max⁡0≤i≤n{F(v,1,i)×F(v,i+1,n)}=max⁡0≤i≤n{F(v,1,i)×(F(v,1,n)−F(v,1,i))}\begin{aligned} & \max\limits_{0 \leq i \leq n} \{ F(v, 1, i) \times F(v, i + 1, n) \} \\ = & \max\limits_{0 \leq i \leq n} \{ F(v, 1, i) \times (F(v, 1, n) - F(v, 1, i)) \} \end{aligned}

这是一个二次函数的形式,显然 F(v,1,i)F(v, 1, i) 在 ⌊F(v,1,n)2⌋\left\lfloor \frac{F(v, 1, n)}{2} \right\rfloor 处取到最值,且前缀的 FF 值一定构成一个连续的区间,故 ⌊F(v,1,n)2⌋\left\lfloor \frac{F(v, 1, n)}{2} \right\rfloor 一定可以取到。

算法一

设 F(v,1,n)=pF(v, 1, n) = p,则字符串 vv 的贡献为 p2−[p mod 2=1]4\frac{p^2 - [p \bmod 2 = 1]}{4}。[p mod 2=1][p \bmod 2 = 1] 等价于子序列的长度为奇数,于是共有 2n−12^{n - 1} 个这样的子序列。

注意到,一个字符串的权值仅和该字符串的 0 与 1 个数相关,字符的顺序是不重要的。设 aa 表示全局 1 的个数,则 n−an - a 表示全局 0 的个数。

设字符 1 选了 ii 个,字符 0 选了 jj 个。则 p=i−jp = i - j,进一步 p2=(i−j)2=i2+j2−2ijp^2 = (i - j)^2 = i^2 + j^2 - 2ij。可以分别计算这三个部分的贡献。

i2i^2 的贡献为

∑i=0ai2(ai)2n−a=a(a+1)2a−22n−a=a(a+1)2n−2\begin{aligned} & \sum_{i = 0}^{a} i^2 \binom{a}{i}2^{n - a} \\ = & a(a + 1)2^{a - 2}2^{n - a} \\ = & a(a + 1)2^{n - 2} \end{aligned}

同理,j2j^2 的贡献为 (n−a)(n−a+1)2n−2(n - a)(n - a + 1)2^{n - 2}。

2ij2ij 的贡献为

∑i=0a∑j=0n−a(ai)(n−aj)2ij=2(∑i=0a(ai)i)(∑j=0n−a(n−aj)j)=a(n−a)2n−1\begin{aligned} & \sum_{i = 0}^{a} \sum_{j = 0}^{n - a} \binom{a}{i}\binom{n - a}{j}2ij \\ & = 2\left( \sum_{i = 0}^a \binom{a}{i}i \right)\left( \sum_{j = 0}^{n - a}\binom{n - a}{j}j \right) \\ & = a(n - a)2^{n - 1} \end{aligned}

于是答案为

a(a+1)2n−2+(n−a)(n−a+1)2n−2−a(n−a)2n−1−2n−14\frac{a(a + 1)2^{n - 2} + (n - a)(n - a + 1)2^{n - 2} - a(n - a)2^{n - 1} - 2^{n - 1}}{4}

算法二

记 value(x)=⌊x2⌋(x−⌊x2⌋)\mathrm{value}(x) = \lfloor \frac{x}{2} \rfloor (x - \lfloor \frac{x}{2} \rfloor),则字符串 vv 的贡献为 value(F(v,1,n))\mathrm{value}(F(v, 1, n))。

注意到,一个字符串的权值仅和该字符串的 0 与 1 个数相关,字符的顺序是不重要的。

设 aa 表示全局 1 的个数,则 n−an - a 表示全局 0 的个数。故子序列的权值 xx 的取值范围为 [a−n,a][a - n, a]。

对于一个权值 xx,考虑计算有多少个子序列的权值等于 xx,枚举子序列 1 的个数为 ii,则 0 的个数为 i−xi - x。则答案为

∑x=a−navalue(x)⋅(∑i(ai)(n−ai−x))=∑x=a−navalue(x)⋅(∑i(aa−i)(n−ai−x))=∑x=a−navalue(x)⋅(na−x)\begin{aligned} & \sum_{x = a - n}^a \mathrm{value}(x) \cdot \left( \sum_i \binom{a}{i}\binom{n - a}{i - x} \right) \\ = & \sum_{x = a - n}^a \mathrm{value}(x) \cdot \left( \sum_i \binom{a}{a - i}\binom{n - a}{i - x} \right) \\ = & \sum_{x = a - n}^a \mathrm{value}(x) \cdot \binom{n}{a - x} \end{aligned}

发现这是一个和 aa 有关的卷积式,使用 NTT 即可。给 998244353 磕一个。