CF1750G 解题报告
好题。
下文令 \(p\) 为需要计数的排列,\(q\) 为给定排列。
题目的条件有两个:\(p<q\) 和 \(f(p)=k\),\(p<q\) 的一般思路是枚举第一个不同的位置 \(L\),使得 \(p_{1,\dots,L-1}=q_{1,\dots,L-1}\) 且 \(p_L<q_L\)。然后考虑 \(f(p)=k\) 的条件,首先 \(f(p)\) 显然可以写成 \(n-\sum\limits_{i=1}^{n-1}[p_i+1=p_{i+1}]\),那么 \(f(p)=k\) 等价于 \(p_i+1=p_{i+1}\) 的位置数等于 \(n-k\)。
计数这样的位置等于某个值是困难的,套路地使用二项式反演,把恰好改为钦定,现在的问题是,该钦定若干位置连续,还是值连续?
由于 \(p_{1,\dots,L-1}\) 会将值域划分成很多段,如果你要钦定某些位置是连续的,可能会出现剩下的值域不支持这种钦定的情况且很难去除不合法的贡献,另一方面,如果你钦定某些值域是连续的,即 \(x\) 的下一个数是 \(x+1\),就方便许多,因为剩余位置是一段后缀。
我们称 \(p_i+1=p_{i+1}\) 为一个“连接”,设 \(G_k\) 为考虑到当前 \(L\),钦定了 \(k\) 个连接的方案数。先枚举 \(p_L\),\([1,n]\) 中还没出现的数会被划分为若干连续段,设这些数中有 \(d\) 个可行的连接,即存在 \(d\) 个 \((x,x+1)\) 都没有出现过。那么 \(G_k=\binom dk(n-L-k)!\)。设 \(F_k\) 表示 \(p_{L+1,\dots,n}\) 中恰好有 \(k\) 个连接的方案数,显然有 \(G_k=\sum\limits_{i=k}^{n-1}\binom ikF_i,F_k=\sum\limits_{i=k}^{n-1}(-1)^{i-k}\binom ikG_i\)。然后考虑 \(p_{1,\dots,L}\) 也会组成连接,此时我们可以直接把 \(G_k\) 朴素地转移到 \(F_k\),然后将 \(F_k\) 贡献到最终连接数为 \(k+c\) 的答案上,但是这样复杂度是 \(\mathcal{O}(n^4)\) 的。考虑优化,首先 \(p_L\) 可以不用枚举,因为只有两种情况:\(p_L-1\) 是否在前缀中出现过,如果没有出现过,那么需要让 \(d\gets d-1\) 来减少 \((p_L-1,p_L)\) 这一连接带来的不合法贡献。现在复杂度变为 \(\mathcal{O}(n^3)\)。
我们肯定不能每次都二项式反演,不然复杂度至少是 \(\mathcal{O}(n^3)\) 的。换一个角度考虑,当多出一个固定的连接时,最终全局的 \(G_k\) 怎么变化?换句话说,当全局的 \(F_k\) 变为 \(F_{k-1}\) 时,\(G_k\) 怎么变?我们可以选择钦定这次连接,或者不钦定,所以有 \(G'_k=G_k+G_{k-1}\)。用 GF 来解释,就是 \(G\gets G\times(1+x)\)。设对于 \(L\),不考虑固定连接 GF 是 \(G(L)\),那么如果 \(L\) 之前有 \(c\) 个固定连接,贡献就是 \(G(L)\times(1+x)^c\)。
那么我们考虑倒序枚举 \(L\),维护 \(L'>L\) 的 \(\sum G(L')\times(1+x)^*\),当 \(p_{L-1}+1=p_L\) 时,给之前的和乘上 \((1+x)\),即做一遍 \(G_k\gets G_k+G_{k-1}\),然后加上 \(G(L)\) 的贡献。最后做一遍二项式反演即可,时间复杂度 \(\mathcal{O}(n^2)\)。

浙公网安备 33010602011771号