Loading

分治 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)\)

例题

P12445 [COTS 2025] 数好图 / Promet我的题解

posted @ 2025-09-11 21:54  HaHeHyt  阅读(48)  评论(0)    收藏  举报