对于 EI K 逆序对排列计数的另一种自然求和方法的理解

有一个简单的 \(O(n^3)\) DP,考虑 \(f_{x + 1, k} = \sum_{j = 0}^{x} f_{x, k - j}\),利用前缀和优化即可。

考虑这实际上是 \(f_{x + 1}(k) = f_x(k) * \frac {1 - k^{x + 1}}{1 - k}\),于是答案实际上为:

\[[x^k]f(x) = \prod_{i = 1}^n \frac {1 - x^i}{1 - x} \]

接下来的方法来自 EI,大力膜拜,这里稍稍细致展开。

考虑加入哑元 \(t\),也就是看似没有用的一个元:

\[f(t) = \prod_{i = 1}^n \frac {1 - x^i t}{1 - x} \]

有一个重要的观察是:

\[f(xt) = \prod_{i = 1}^n \frac {1 - x^{i + 1} t}{1 - x} = f(t) \frac {1 - x^{n + 1} t}{1 - x t} \]

因此有 \((1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)\)

有一个关键的等式:

\[[t^m] f(xt) = x^m [t^m] f(t) \]

考虑 \([t^m] f(t)\) 是由某 \(k\)\(x^i t\) 选来,现在每一个 \(t\) 都多来了一个 \(x\),那么自然就多了 \(m\)\(x\),于是得到了上式。

考虑设 \(f_m = [t^m] f(x)\),也就是此时将 \(f\) 看作一个关于 \(t\) 的多项式,而系数 \(f_m\) 实际上一个关于 \(x\) 的多项式。

我们在 \((1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)\) 对两边同时取 \([t^m]\),可以得到:

\[\begin{aligned} \\ [t^m] f(xt) - [t^m] xt f(xt) &= [t^m] f(t) - [t^m] x^{n + 1} t f(t) \\ x^m f_m - x \times x^{m - 1} f_{m- 1} &= f_m - x^{n + 1} f_{m - 1} \\ (x^m - 1) f_m &= (x^{n + 1} - x^m) f_{m - 1} \\ f_m &= -x^m \frac {1 - x^{n - m + 1}}{1 - x^m} f_{m - 1} \end{aligned} \]

现在我们考虑如何维护这个函数。

考虑 \(\frac 1 {1 - x^m} = \sum_k x^{km}\),实际上是对于 \(f_{m - 1}\) 做一个间隔为 \(m\) 的前缀和。

考虑 \(1 - x^{n - m + 1}\) 就是 \(f_m(x) \leftarrow f_m(x) - f_m(x - (n - m + 1)\) 即可。

于是考虑 \(g_m = \frac {1 - x^{n - m + 1}}{1 - x^m} g_{m - 1}\),那么

\[f_m = (-1)^m x^{\frac {m \times (m + 1)} 2} g_m \]

\(g\) 是好维护的,最终答案为 \(\sum [x^k] f_m = \sum [x^{k - \frac {m(m + 1)}{2}}] (-1)^m g_m\),发现当 \(m \gt \sqrt k\) 的时候就没有值了,所以只需要维护 \(O(\sqrt k)\) 次卷积,每次是 \(O(k)\) 的,非常优秀。

posted @ 2024-01-15 19:53  jeefy  阅读(9)  评论(0编辑  收藏  举报