题解 P7111 【青春有悔】

Elegia

2020-11-28 23:42:57

Solution

本文给出一个 $\tilde O(n^{4/3})$ 的算法(下文均认为 $n,q$ 同阶,且用 $\tilde O$ 符号避免 $\log$ 因子的讨论),虽然复杂度较优,但其所带的 $\log $ 因子以及常数因子使其在目前的数据范围内并没有太大的优势。([这里](https://www.luogu.com.cn/record/43107202)是一个实现) ------------- 让我们先来回顾一下前面不太关键的部分,设 $f(x) = \sum_{n\ge 0} a_n x^n$ 为总分数为 $n$ 的方案数的生成函数,那么考虑计数总分小于 $y$ 的情况,这无非就是 $$ [x^{y-1}] \frac 1{1-x} f(x) $$ 根据诸个比赛日相互之间的独立性,$f(x)$ 可确定为一个简单的乘积式 $$ f(x) = \prod_{i=1}^n \frac{1-x^{a_i+1}}{1-x} $$ 即 $g(x) = \frac 1{1-x} f(x)$,那么考虑整理各 $(1-x^k)$ 指数上的幂次,可得到整数数列 $c_k$,满足 $$ \begin{aligned} g(x) &= \prod_{k\ge 1} (1-x^k)^{c_k}\\ &= \exp\left(\sum_{k\ge 1} c_k \ln (1-x^k)\right)\\ \end{aligned} $$ 注意到这是可以 $\Theta(n\log n)$ 计算的。 而对于每次询问,设其将一个原本在 $[0, s]$ 内的分数改为了 $[0, t]$,那么我们询问的实则就是 $$ \begin{aligned} & \quad [x^{y-1}] \frac{1-x^{t+1}}{1-x^{s+1}} g(x)\\ &= \left([x^{y-1}] - [x^{y-t-2}]\right) \frac 1{1-x^{s+1}} g(x) \end{aligned} $$ 因此,我们将问题转化为了如下情况:多次给出 $m, k$,询问 $[x^m] \frac 1{1-x^k} g(x)$,也即 $$ \sum_{j\ge 0} g_{m-jk} $$ -------------- 接下来给出解决转化后问题的关键。我们首先考虑一个稍微弱一点的问题,即给出 $0\le r < k$,求 $$ \sum_{j \bmod k = r}g_j $$ 这个问题不难写做生成函数的形式: $$ [x^r] g(x) \bmod (x^k-1) $$ 因此我们不妨令 $B$ 为阈值,预处理对于所有的 $k\le B$,其 $g(x) \bmod (x^k-1)$,这通过经典的分治取模可得一个复杂度为 $\tilde O(n + B^2)$ 的算法。 因此复杂度为 $\tilde O(n + B^2 + \frac {n^2}B)$,不难得到当 $B = \tilde O(n^{2/3})$ 的时候渐进复杂度的指数取到最优,为 $\tilde O(n^{4/3})$。 而对于原问题呢?实际上这可以通过加一层分治,每层都按照本层的 $B=\tilde O(n^{2/3})$ 进行预处理,那么预处理的复杂度为 $T(n) = 2T(n/2) + \tilde O(n^{4/3})$,这还是 $T(n) = \tilde O(n^{4/3})$ 的。而一次询问是 $Q(n) = Q(n/2) + \tilde O(n^{1/3})$ 的,因此询问还是 $\tilde O(n^{1/3})$ 的。 综上,我们就得到了一个 $\tilde O(n^{4/3})$ 的做法。