divide_fft
https://www.luogu.com.cn/problem/P4721
$f_i = \sum f_{i - j} g_{j}$,边界是 $f_{0}=1$,$g$ 给出。
考虑设置一个 $B$,然后每次将 $f$ 扩展长度 $B$,然后块内可以用 $B^2$ 来处理。
复杂度为 $O(\frac{N}{B}(B^2 + N \log N))$。
实测和普通的分治 fft 差距并不大。
普通的分治 fft 类似 cdq 分治的方式,考虑得到一个区间 $[l, r]$。
- 先递归左边,得到左边答案。
- 假设左边得到的是正确的,计算给右边的贡献。
- 然后递归右边。
$O(N\log^2 N)$:https://www.luogu.com.cn/record/33663228
$O(\frac{N}{B}(B^2 + N \log N))$:https://www.luogu.com.cn/record/123853754
1 | const int BLOCK = 4000; |
例题。
https://atcoder.jp/contests/abc315/tasks/abc315_h
code:https://atcoder.jp/contests/abc315/submissions/45261701
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.