题解:P14973 『GTOI - 2D』木棍

· · 题解

特以此题解纪念首次在 Div.2 场切 D。虽然没过 C 题。

Problem.

给定长度为 n01S,需支持两种操作:

  1. 1 l r:翻转区间 [l, r] 内的字符(0110);

  2. 2 l r:查询区间 [l, r] 组成的子串 T 的价值 V(T) \mod 998244353

具体定义:

Solution.

核心知识:组合数学 + 线段树。

一、核心性质推导:

要计算 V(T),需先明确 f(T) 的关键性质与 V(T) 的数学表达式:

  1. $V(T) = \left( \binom{L}{d} - \binom{L}{d-1} \right) \mod 998244353

    该式源于卡特兰数变形,本质是排除非法消去情况(可理解为“不跨越对角线”的路径计数修正)。

:::info[证明]{close}

  1. 前置性质:

    • 消去“01”对后,剩余串 f(T) 必为 1^a0^b 结构(a+b=k)。

    • 合法串需满足 L = k + 2dd 为消去对数),否则 V(T)=0,公式可自然适配该边界条件。

  2. 组合计数基础(总候选串数):

    合法串含 a+d1b+d0(消去 d10 后,剩余 a1b0)。总候选数为从 L 个位置中选 b+d 个位置放置 0 的组合数 \binom{L}{d},因 a+b=k,两种选法数量等价。需注意,此计数包含消去后结构非 1^a0^b 的非法串,需进一步剔除。

  3. 反射原理剔除非法串

    非法串的核心特征的是消去过程中存在“0 剩余数 > 1 剩余数”的情况,导致最终结构不合法。通过反射变换构造双射:取首个出现该非法情况的位置,翻转该位置及前缀字符,变换后串的消去对数变为 d-1,对应 \binom{L}{d-1} 种选法。

    由于每个非法串与 \binom{L}{d-1} 中的串一一对应,故非法串总数为 \binom{L}{d-1})。

  4. 最终公式

    合法串数量 = 总候选串数 - 非法串数,代入得 V(T) = \binom{L}{d} - \binom{L}{d-1},公式得证。 :::

二、代码实现:

  1. 因为模数 998244353 是质数,所以我们可以用费马小定理预处理阶乘与逆元阶乘,实现 O(1) 计算 \binom{n}{k}(太菜了,费马小定理不会证,大家可以看这篇)。

  2. 线段树维护区间信息:需要高效维护“区间消去 01 后的剩余 1 / 0 数量”,且支持区间翻转,因此设计线段树节点存储:

    • cnt1/cnt0:原区间剩余的 1/0 数量;

    • r1/r0:区间翻转后剩余的 1/0 数量;

    • flip:翻转延迟标记。

    核心操作:节点合并(合并左右区间时消去跨区间的 01 对)、翻转标记下推、区间更新 / 查询。

各项操作复杂度:

总复杂度大概是 O(MAXN + n + q\log n),可以过此题。

贴个代码。