分治 NTT 一则
问题
给定 \(n\) 个一次分式 \(q_i(x)=\dfrac{c_ix}{a_ix+b_i}\),\(\forall i\in [1,n],f_i=[x^i]\sum\limits_{j\in [1,i]}\prod\limits_{k\in [1,j]} q_k(x)\),求出所有 \(f_{1},f_2,\cdots,f_n\)。
解法
考虑 cdq 分治,计算 \(j\in [l,mid]\to i\in [mid+1,r]\) 的贡献。
相当于你要算出
\[[x^{mid+1\sim r}]\sum\limits_{j\in [l,mid]}\prod\limits_{k\in [1,j]} q_k(x)=[x^{(mid+2-l)\sim (r-l+1)}]Q_{l-1}\sum\limits_{j\in [l,mid]}\prod\limits_{k\in [l,j]} q_k(x)=[x^{(mid+2-l)\sim (r-l+1)}]Q_{l-1}T_{l,mid}
\]
其中 \(Q_{m}=\prod\limits_{1\le i\lt m} (q_{i}(x)/x),T_{l,r}=\sum\limits_{j\in [l,r]}\prod\limits_{k\in [l,j]} q_k(x).\)
首先 \(T\) 是最好维护的。分子分母的 \(\deg\) 都是 \(\mathcal{O}(r-l+1)\) 级别,直接分治然后多项式乘法维护即可。
- 注意要先分治递归求出 \(T\),再 cdq 分治算后面的贡献。
具体的,记 \(\pi[l,r]=\prod\limits_{i\in [l,r]} q_i(x)\),则 \(T_{l,r}=T_{l,mid}+\pi[l,mid]T_{mid+1,r}.\)
然后考虑在递归到 \([l,r]\) 的时候传入 \(Q_{l-1}\),但是直接传入则 \(Q\) 的项数直接爆了。
注意到我们到 \([l,r]\) 的时候,只需要维护 \(Q_{l-1}\) 的前 \(r-l+1\) 项,于是这样递归项数就是对的。
- 递归到 \([mid+1,r]\) 的时候 \(Q\) 要乘一下 \(\prod\limits_{l\le i\le mid} (q_{i}(x)/x)\)。
复杂度是分治 NTT 一贯的 \(\mathcal{O}(n\log ^2n)\)。

浙公网安备 33010602011771号