题意
我们记一个排列 P P P的升高为 k k k当且仅当存在 k k k个位置 i i i使得 P i < P i + 1 P_i < P_{i+1} Pi<Pi+1。
现在给定排列长度 n n n,对于所有整数 k ∈ [ 0 , n ] k\in [0,n] k∈[0,n],求有多少个排列的升高为 k k k。
n ≤ 200000 n\le 200000 n≤200000
做法一
考虑钦定 k k k个位置为 < < <,其他位置不管。对 ( n − 1 k ) \binom{n-1}{k} (kn−1)种不同取法的方案数求和,记为 g k g_k gk。
如果把关系为 < < <的相邻两个位置合并,则共有 n − k n-k n−k个集合,记第 i i i个集合的大小为 s i s_i si,则合法的排列数量为 n ! ∏ s i ! \frac{n!}{\prod s_i!} ∏si!n!
因此 g k = ∑ s i n ! ∏ s i ! g_k=\sum_{s_i}\frac{n!}{\prod s_i!} gk=si∑∏si!n!
写成生成函数的形式,就是 g k = n ! [ x n ] ( e x − 1 ) m = n ! [ x n ] ∑ i = 0 m ( m i ) ( − 1 ) m − i e i x = n ! ∑ i = 0 m ( m i ) ( − 1 ) m − i i n i ! \begin{aligned} g_k&=n! [x^n] (e^x-1)^m\\ &=n! [x^n] \sum_{i=0}^m\binom{m}{i}(-1)^{m-i}e^{ix}\\ &=n! \sum_{i=0}^m\binom{m}{i}(-1)^{m-i}\frac{i^n}{i!} \end{aligned} gk=n![xn](ex−1)m=n![xn]i=0∑m(im)(−1)m−ieix=n!i=0∑m(im)(−1)m−ii!in
把组合数展开然后FFT就可以求出 g k g_k gk。
设 f k f_k fk表示答案,不难发现 g i = ∑ j = i n − 1 ( j i ) f j g_i=\sum_{j=i}^{n-1}\binom{j}{i}f_j