2025.04.01 CW 模拟赛 B. 数列 & [ARC115E] LEQ and NEQ

B. 数列 & LEQ and NEQ

原题但没有做出来, 不过当时写的是单 \(\log\)​​ 做法.


题目描述

给定长度为 \(n\) 的正整数序列 \(a\)

一个长度为 \(n\) 的序列 \(b\) 是好的,当且仅当对于 \(1 \leq i < n\),都有 \(b_i \neq b_{i+1}\)

求解有多少个长度为 \(n\) 的好的正整数序列 \(b\),满足对于 \(1 \leq i \leq n\) 都有 \(1 \leq b_i \leq a_i\),答案对 \(998\ 244\ 353\)​ 取模。


思路

考虑一种 \(\mathcal{O}(nV)\) 的做法. 设 \(f_{i, j}\) 表示枚举到第 \(i\) 个数, 当前数填 \(j\) 的方案数. 转移时前缀和优化即可. 与正解联系并不大, 考场上止步于此.

正难则反, 我们考虑容斥.

我们称 \(b_i = b_{i + 1}\) 称为坏点, 设 \(F_i\) 表示至少\(i\) 对坏点的方案数, 答案即为 \(\displaystyle \sum_{i = 0}^n (-1)^i \cdot F_i\).

思考如何求出 \(F\) 数组, 我们可以设 \(f_{i, j}\) 表示当前枚举到第 \(i\) 个数, 已经有「\(j\) 对」坏点的方案数, 其中 「\(j\) 对」不单指两个数, 而是有 \(j\) 段连续且相等的段, 那么 \(F_i = f_{n, n - i}\).

不难写出 \(\mathcal{O}(n^3)\) 的转移式子

\[f_{i, j} = \sum_{k = 1}^{i - 1} f_{k, j - 1} \times \min_{l = k + 1}^i a_l \]

这里有一个 \(\rm{trick}\)

  • 因为最终容斥系数 \((-1)^j\) 只与 \(j\)奇偶性相关, 所以 \(j\) 这一维可以用 \(0/1\) 进行代替.

因此式子可以改写成

\[f_{i, 0} = \sum_{j = 1}^{i - 1} f_{j, 1} \times \min_{k = j + 1}^i a_k \\ f_{i, 1} = \sum_{j = 1}^{i - 1} f_{j, 0} \times \min_{k = j + 1}^i a_k \]

可以发现我们可以将转移式子分为两段, 分别是 \(\displaystyle \min_{k = j + 1}^i a_k = a_i\) 和其他. 前面一段可以使用前缀和进行优化, 同时记上一个比 \(a_i\) 小的位置为 \(lst\)

\[f_{i, x} = (sum_{i - 1, x \oplus 1} - sum_{lst - 1, x \oplus 1}) \times a_i + \sum_{j = 1}^{lst - 1} f_{j, x} \times \min_{k = j + 1}^i a_k \]

因为在 \(1 \sim lst\)\(a_{lst} < a_i\), 所以后面的式子可以改写为 \(\displaystyle \sum_{j = 1}^{lst - 1} f_{j, x} \times \min_{k = j + 1}^{lst} a_k = f_{lst, j}\), 直接继承过来. 对于 \(lst\) 不难使用单调栈维护, 所以这样一来就是线性的了.


结语

当时应该是抄的题解.

用了几个不熟容斥 \(\rm{trick}\), 长见识了.

posted @ 2025-04-01 20:31  Steven1013  阅读(34)  评论(0)    收藏  举报