还不会这题的多项式求逆的算法。

发现每一项都是一个卷积的形式,那么我们可以使用$NTT$来加速,直接做是$O(n^2logn)$的,我们考虑如何加速转移。

可以采用$cdq$分治的思想,对于区间$[l, r]$中的数,先计算出$[l, mid]$中的数对$[mid + 1, r]$中的数的贡献,然后直接累加到右边去。

容易发现,这样子每一次需要用向量$[l,l + 1, l +  2, \dots, mid]$卷上$g$中$[1, 2, \dots, r - l]$。

时间复杂度$O(nlog^2n)$,感觉这东西跑得并不慢鸭。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;const int N = 3e5 + 5;
const ll P = 998244353LL;int n, lim, pos[N];
ll f[N], g[N], a[N], b[N];template <typename T>
inline void read(T &X) {X = 0; char ch = 0; T op = 1;for (; ch > '9'|| ch < '0'; ch = getchar())if (ch == '-') op = -1;for (; ch >= '0' && ch <= '9'; ch = getchar())X = (X << 3) + (X << 1) + ch - 48;X *= op;
}template <typename T>
inline void swap(T &x, T &y) {T t = x; x = y; y = t;
}inline ll fpow(ll x, ll y) {ll res = 1LL;for (; y > 0; y >>= 1) {if (y & 1) res = res * x % P;x = x * x % P;}return res;
}inline void prework(int len) {int l = 0;for (lim = 1; lim <= len; lim <<= 1, ++l);for (int i = 0; i < lim; i++)pos[i] = (pos[i >> 1] >> 1) | ((i & 1) << (l - 1));
}inline void ntt(ll *c, int opt) {for (int i = 0; i < lim; i++)if (i < pos[i]) swap(c[i], c[pos[i]]);for (int i = 1; i < lim; i <<= 1) {ll wn = fpow(3, (P - 1) / (i << 1));if (opt == -1) wn = fpow(wn, P - 2);for (int len = i << 1, j = 0; j < lim; j += len) {ll w = 1;for (int k = 0; k < i; k++, w = w * wn % P) {ll x = c[j + k], y = c[j + k + i] * w % P;c[j + k] = (x + y) % P, c[j + k + i] =(x - y + P) % P;}}}if (opt == -1) {ll inv = fpow(lim, P - 2);for (int i = 0; i < lim; i++) c[i] = c[i] * inv % P;}
}void solve(int l, int r) {if (l == r) {a[l] = (a[l] + b[l]) % P;return;}int mid = ((l + r) >> 1);solve(l, mid);prework(r - l + 1);for (int i = 0; i < lim; i++) g[i] = f[i] = 0;for (int i = l; i <= mid; i++) f[i - l] = a[i];for (int i = 1; i <= r - l; i++) g[i - 1] = b[i];ntt(f, 1), ntt(g, 1);for (int i = 0; i < lim; i++) f[i] = f[i] * g[i] % P;ntt(f, -1);for (int i = mid + 1; i <= r; i++) a[i] = (a[i] + f[i - l - 1]) % P;solve(mid + 1, r);
}int main() {read(n); n--;for (int i = 1; i <= n; i++) read(b[i]);a[0] = 1;solve(1, n);for (int i = 0; i <= n; i++)printf("%lld%c", a[i], i == n ? '\n' : ' ');return 0;
}

View Code

转载于:https://www.cnblogs.com/CzxingcHen/p/10197696.html

Luogu 4721 【模板】分治 FFT相关推荐

  1. 洛谷 - P4721 【模板】分治 FFT(分治NTT)

    题目链接:点击查看 题目大意:给出序列 g1,⋯,ng_{1,\cdots,n}g1,⋯,n​,求 f0,⋯,nf_{0,\cdots,n}f0,⋯,n​ 规定 fi=∑j=1ifi−jgjf_i=\ ...

  2. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)

    luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...

  3. [洛谷P4721]【模板】分治 FFT

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$ f_i=\sum_{j=1}^if_{i-j}g_j\\ f_0=1 $$ 题解:直接求复杂度是$O ...

  4. 【学习笔记】分治FFT

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 分治FFT 1. Luogu P4721 [模板]分治 FFT 2. 2020 ICPC Mac ...

  5. FTT NTT 分治FFT

    FFT study from: http://www.orchidany.cf/2019/02/19/FFT1/ https://www.cnblogs.com/zwfymqz/p/8244902.h ...

  6. 2020 ICPC Macau A. Accelerator(期望,计数,分治FFT)(每日一题 21.7.6)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2020 ICPC Macau A. Accelerator(分治FFT) Problem 给定长度为 ...

  7. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  8. [分治FFT]「CTSC2018」青蕈领主

    题目梗概 定义一个序列是连续的,当且仅当这个序列的最大值-最小值不超过序列长度-1. 现在有一个长度为\(n\)的排列,给出以每个位置为右端点的最长连续区间的长度,求满足的排列的方案数. 解题思路 如 ...

  9. HDU5322 - cdq分治FFT加速dp

    5322 Hope [CDQ分治FFT加速计算dp] 题意 每一个每一个排列,排列中每个数向它后面第一个比它大的数连一条边. 每个排列对于答案的贡献是这个排列所生成的图中的每一个联通量中点的个数的平方 ...

  10. 【牛客 - 157F】三轮(dp,分治fft)

    题干: 链接:https://ac.nowcoder.com/acm/contest/157/F 来源:牛客网 小k有一个三轮,它最多可以装105大小的东西 小k有n种商品,他要准备出摊了 每种商品体 ...

最新文章

  1. asp.net performance
  2. spring data jpa实现分页查询功能
  3. Unity4.3 遮挡剔除:基本知识
  4. 虚拟dom_虚拟DOM与dom diff
  5. ideahtml调用jquery函数失败_[WEB篇]-JQuery-06-Jquery实现异步调用
  6. Jquery调用Web Service
  7. python中利用pygame模块输出文字
  8. 数据结构利器之私房STL(中)
  9. Lua云验证卡密破解工具
  10. JAVA:实现RabinKarpAlgorithm拉宾卡普算法(附完整源码)
  11. 最近弄魔窗SDK踩过的坑
  12. java stringbuilder_Java stringBuilder的使用方法及实例解析
  13. Pocket PC、Pocket PC phone、Smartphone的区别
  14. 怎么录屏幕视频?教你学会录制屏幕
  15. android郭霖博客,Runtime Permissions(郭霖CSDN公开课)
  16. dell刀片服务器 重启 维护,已解决: dell 刀片服务器内网网络问题 - Dell Community
  17. 雷军一往无前的十年(小米十周年公开演讲)附赠《一往无前》电子书籍
  18. 常用软件开发模型的介绍
  19. elasticsearch 深入 —— 结构化搜索
  20. 专科毕业五年,我进腾讯了!

热门文章

  1. (转)Shell中获取字符串长度的七种方法
  2. 往文件中写数据--增量
  3. MySQL 5.7.11 重置root密码
  4. N个三角形分割平面个数(数学)
  5. Java 中的位运算
  6. 关于“收获”啰嗦几句。
  7. 禁用JavaScript之后,你的网站表现如何?
  8. 系列文章----.Net程序员学用Oracle系列
  9. Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行
  10. 转:看问题的5个层次