下面记 \(mod\) 为 \(p\)。
单调不降这个限制很烦人,所以我们首先 给第 \(i\) 位加上 \(i-1\),这样就变成了严格单调递增序列。
值域为 \([0, n + m - 1]\),长度为 \(n\) 的严格单调递增序列,就可以看作从 \([0, n + m - 1]\) 中选 \(n\) 个数。
注意此时和整体增加了 \(n(n-1) \over 2\),所以最后计算出答案之后记得把它弄回去。
我们可以设计一个 DP:设 \(f_{i, j, k}\) 表示前 \(i\) 个数选择了 \(k\) 个数,和为 \(j\)。那么我们容易写出式子:
\[f_{i,j,k} = f_{i-1,j,k} + f_{i-1,j - i\ \bmod\ p,k - 1}
\]
然后就大力写成二元生成函数:
\[F_i(x, y) = F_{i-1}(x, y)(1 + x^iy) \pmod {x^p - 1}
\]
\(\pmod {x^p - 1}\) 就是关于 \(x\) 进行循环卷积,以防有人和我一样没见过这个写法。
那么我们要求的答案就是:
\[ans_i = [x^iy^n] \prod_{i=0}^{n+m-1}(1+x^iy) \pmod {x^p-1}
\]
我们先记 \(M = n + m\)。这个上标很离谱,而由于是循环卷积,\(x^{p + i} \equiv x^i\),所以我们考虑分块地去求这个东西。
所以我们先考虑当 \(p | M\) 的时候这个东西怎么做。
那么:
\[\begin{aligned}
ans_i &= [x^iy^n] \prod_{i=0}^{M-1}(1+x^iy) \pmod {x^p-1}\\
&= [x^iy^n] \left(\prod_{i=0}^{p-1}(1+x^iy)\right)^{\frac{M}{p}} \pmod {x^p-1}\\
\end{aligned}
\]
如果直接考虑它的系数就又拆回原来的 DP 式子了,所以直接考虑系数这条道行不通。考虑求点值然后再插回原多项式。由于有循环卷积,我们就考虑带入单位根 \(\omega_p^i\)。
设 \(G(x) = [y^n]\left(\prod_{i=0}^{p-1}(1+x^iy)\right)^{\frac{M}{p}} \pmod {x^p-1}\),那么我们现在要求的就是 \(G(\omega_p^0), G(\omega_p^1), \cdots, G(\omega_p^{p - 1})\)。
那么我们考虑 \(G(\omega_p^k)\):
\[\begin{aligned}
G(\omega_p^k) = [y^n]\left(\prod_{i=0}^{p-1}(1+\omega_p^{ik}y)\right)^{\frac{M}{p}} \pmod {x^p-1}
\end{aligned}
\]
我们发现,对于这个单位根的上标 \(ik\),它恰好取遍了 \(i\gcd(k, p)\) 每个值 \({\gcd(k, p)}\) 次。令 \(d = \gcd(k, p)\),那么有:
\[\begin{aligned}
G(\omega_p^k) &= [y^n]\left(\prod_{i=0}^{p-1}(1+\omega_p^{ik}y)\right)^{\frac{M}{p}} \pmod {x^p-1}\\
&= [y^n]\left(\prod_{i=0}^{\frac{p}{d}-1}(1+\omega_p^{id}y)\right)^{\frac{Md}{p}} \pmod {x^p-1}\\
&= [y^n]\left(\prod_{i=0}^{\frac{p}{d}-1}(1+\omega_{\frac{p}{d}}^{i}y)\right)^{\frac{Md}{p}} \pmod {x^p-1}\\
\end{aligned}
\]
我们把里面这个东西单独拿出来考虑:\(\prod_{i=0}^{n-1} (1 + \omega_n^i y)\)。
考虑单位根的意义:单位根 \(\omega_n^i\) 就是 \(x^n=1\) 的解。也就是说 \(x^n-1\) 可以因式分解为 \(\prod_{i=0}^{n - 1}(x - \omega_n^i)\)。
那么就有:
\[\begin{aligned}
x^n-1 &= \prod_{i=0}^{n - 1} (x - \omega_n^i) \\
(-1)^n (x^n-1) &= \prod_{i=0}^{n - 1} (-x + \omega_n^i) \\
(-1)^n (x^n-1) y^n&= \prod_{i=0}^{n - 1} (-xy + \omega_n^iy) \\
\end{aligned}
\]
令 \(x = -\frac{1}{y}\),那么有:
\[\begin{aligned}
(-1)^n \left(\left(\frac{1}{y}\right)^n-1\right) y^n &= \prod_{i=0}^{n - 1} (1 + \omega_n^iy) \\
\prod_{i=0}^{n - 1} (1 + \omega_n^iy) &= 1 - (-y)^n
\end{aligned}
\]
将这个带回原式子:
\[\begin{aligned}
G(\omega_p^k) &= [y^n]\left(1 - (-y)^n\right)^{\frac{Md}{p}} \pmod {x^p-1}\\
&= [y^n]\sum_{i=0}^{\frac{Md}{p}}\binom{\frac{Md}{p}}{i}(-1)^i(-y)^{ni} \pmod {x^p-1}\\
&= \begin{cases}
\binom{\frac{Md}{p}}{\frac{nd}{p}}(-1)^{\frac{nd}{p} + n} &p | nd\\
0 &\textrm{otherwise}
\end{cases}
\end{aligned}
\]
于是到这里我们就计算出了 \(G(\omega_p^k)\) 了。
接下来,我们需要做一步 IDFT。但是 \(\omega_p\) 在模意义下不一定存在,所以我们不能直接做 IDFT。
那么我们把 IDFT 的式子写出来:
\[g_i = \frac{1}{p} \sum_{j=0}^{p - 1} G(\omega_p^j) \omega_p^{-ij}
\]
我们需要想办法避免复数。注意到 \(G(\omega_p^i)\) 实际上只与 \(\gcd(i, p)\) 有关,所以我们可以枚举 \(\gcd(i, p)\):
\[\begin{aligned}
g_i &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{j=0}^{p - 1}[\gcd(j, p) = d] \omega_p^{-ij}\\
&= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{j=0}^{\frac{p}{d} - 1}[\gcd(j, \frac{p}{d}) = 1] \omega_p^{-ijd}\\
&= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \sum_{j=0}^{\frac{p}{kd} - 1}\omega_p^{-ijdk}\\
&= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \sum_{j=0}^{\frac{p}{kd} - 1}\omega_{\frac{p}{kd}}^{-ij}\\
&= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \left[\frac{p}{kd} | i\right] \frac{p}{kd}
\end{aligned}
\]
最后一步是单位根反演,如果不会的可以去搜一下(其实我不会)就是一个式子 \([n|k] = \frac{1}{k}\sum_{i=0}^{n - 1} \omega_n^{ik}\)。
证明也很简单,如果 \(n | k\),那么 \(\omega_n^{ik} = 1\),原式就等于 \(1\),否则等比数列求和可得等于 \(0\)。
那么 \(g_i\) 就可以 \(O(p)\) 的计算出来了。(枚举一步因子是 \(O(\sqrt{p})\) 的)
那么我们就可以在 \(O(p^2)\) 的复杂度内计算出原来的大式子了。
这样 \(p | M\) 的情况就做完了。考虑还有 \(q = M \bmod p\) 项,而因为我们要求 \([y^n]\),所以我们只需要计算 \(n - q \sim n\) 时的答案,后面的几项暴力乘起来即可。再加上预处理阶乘的复杂度 \(O(n + m)\),总复杂度就是 \(O(n + m + p^3)\)。