「CF2077C」Binary Subsequence Value Sum

Description

Link:CF2077C

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

max0iv{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)=rl+12×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 (1in1 \leq i \leq n),你需要将 sis_i 取反。每次操作结束后,你都需要求出 ss 的所有非空子序列的得分之和。答案对 998244353998244353 取模。

数据范围:1n2×1051 \leq n \leq 2 \times 10^51q2×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] 的权值之和。

考虑式子

max0in{F(v,1,i)×F(v,i+1,n)}=max0in{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[pmod2=1]4\frac{p^2 - [p \bmod 2 = 1]}{4}[pmod2=1][p \bmod 2 = 1] 等价于子序列的长度为奇数,于是共有 2n12^{n - 1} 个这样的子序列。

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

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

i2i^2 的贡献为

i=0ai2(ai)2na=a(a+1)2a22na=a(a+1)2n2\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 的贡献为 (na)(na+1)2n2(n - a)(n - a + 1)2^{n - 2}

2ij2ij 的贡献为

i=0aj=0na(ai)(naj)2ij=2(i=0a(ai)i)(j=0na(naj)j)=a(na)2n1\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)2n2+(na)(na+1)2n2a(na)2n12n14\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(xx2)\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))

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

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

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

x=anavalue(x)(i(ai)(naix))=x=anavalue(x)(i(aai)(naix))=x=anavalue(x)(nax)\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 磕一个。