正题

题目链接:https://www.luogu.com.cn/problem/P4721


题目大意

给出序列ggg,然后f0=1f_0=1f0​=1
fi=∑j=1ifi−jgjf_{i}=\sum_{j=1}^if_{i-j}g_jfi​=j=1∑i​fi−j​gj​

求序列fff


解题思路

使用分治后用NTTNTTNTT计算前区间对后区间的贡献即可。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10,XJQ=998244353;
ll n,g[N],f[N],a[N],b[N],R[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%XJQ;b>>=1;x=x*x%XJQ;}return ans;
}
void NTT(ll *f,ll logn,ll op){ll n=1<<logn;for(ll i=0;i<n;i++)if(i<R[i])swap(f[i],f[R[i]]);for(ll p=2;p<=n;p<<=1){ll len=p>>1,tmp=power(3,(XJQ-1)/p);if(op==-1)tmp=power(tmp,XJQ-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+len;i++){ll tt=buf*f[len+i]%XJQ;f[len+i]=(f[i]-tt+XJQ)%XJQ;f[i]=(f[i]+tt)%XJQ;buf=buf*tmp%XJQ;}}}if(op==-1){ll tmp=power(n,XJQ-2);for(ll i=0;i<n;i++)f[i]=f[i]*tmp%XJQ;}return;
}
void cdq(ll l,ll r,ll logn){if(!logn) return;if(l>=n)return;ll n=1<<logn,mid=l+r>>1;cdq(l,mid,logn-1);for(ll i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)?n>>1:0);memset(a+(r-l)/2,0,sizeof(ll)*(r-l)/2);memcpy(a,f+l,sizeof(ll)*(r-l)/2);memcpy(b,g,sizeof(ll)*(r-l));NTT(a,logn,1);NTT(b,logn,1);for(ll i=0;i<n;i++)a[i]=a[i]*b[i]%XJQ;NTT(a,logn,-1);for(ll i=(r-l)/2;i<r-l;i++)f[l+i]=(f[l+i]+a[i])%XJQ;cdq(mid,r,logn-1);return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<n;i++)scanf("%lld",&g[i]);f[0]=1;ll logn;for(logn=0;(1<<logn)<n;logn++);cdq(0,1<<logn,logn);for(ll i=0;i<n;i++)printf("%lld ",(f[i]+XJQ)%XJQ);
}

P4721-[模板]分治FFT【NTT,分治】相关推荐

  1. 【学习笔记】分治FFT

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

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

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

  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. FTT NTT 分治FFT

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

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

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

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

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

  7. HDU5730 FFT+CDQ分治

    题意:dp[n] = ∑ ( dp[n-i]*a[i] )+a[n], ( 1 <= i < n) cdq分治. 计算出dp[l ~ mid]后,dp[l ~ mid]与a[1 ~ r-l ...

  8. HDU5322 - cdq分治FFT加速dp

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

  9. 【集训队作业2018】青春猪头少年不会梦到兔女郎学姐(容斥)(分治FFT)

    简要题意: 给定 nnn 种颜色的球,第 iii 种颜色的球数量为 aia_iai​ 个,一种排列的贡献可以如下计算:先把这个序列首尾相连,然后把所有相邻且颜色相同的段拿出来,贡献为他们的长度之积,求 ...

  10. 【LOJ#575】【LNR#2】不等关系(容斥,动态规划,分治FFT)

    [LOJ#575][LNR#2]不等关系(容斥,动态规划,分治FFT) 题面 LOJ 题解 一个暴力\(dp\),设\(f[i][j]\)表示考虑完了前\(i\)个位置,其中最后一个数在前面所有数中排 ...

最新文章

  1. 2020级HAUT新生周赛(四)@张承树专场
  2. Nodejs的express使用教程
  3. android设备局域网中快速搜索之cling方式
  4. ASP.NET Core 基础知识(十四)错误处理
  5. kafka maven没有下载_构建工具的进化:ant, maven, gradle
  6. 如何采集指定年份的poi_房价关键影响因素分析:从数据采集到建模全过程
  7. layou split 属性
  8. oracle跳过undo回滚段启动,[Oracle] 解析在没有备份的情况下undo损坏怎么办
  9. 145_Power BI Report Server自定义Form登录
  10. 【SIGIR 2021 最佳学生论文】图像文本检索的动态模态交互建模
  11. WebRTC学习资料大全
  12. 计算机基础854哈工大,854计算机基础大纲
  13. 大众奥迪车 UDS协议ECU的诊断
  14. MySQL8安装详细步骤
  15. Linux内核调试方法
  16. matlab批量裁剪图像并保存,matlab批量裁剪tif图片
  17. 戴戒指的含义(以后要结婚的必看)
  18. Linux基础命令之cd返回上级目录/返回根目录/进目录/返回上一次目录/返回指定目录
  19. empty怎么发音_empty怎么读
  20. 驾考笔记:科目二考试满分攻略——超详细的点位细节梳理,各种意外情况处理方案整理

热门文章

  1. php左连接,如何在php中对左联接查询返回的数组数据进...
  2. 小米8对一加6打开软件速度测试,买一加6还是小米8?小米8和一加6区别对比
  3. mysql控制台教程视频教程_mysql 控制台操作
  4. 8 无法识别raid盘_王者荣耀防沉迷规则再升级;未来将采用人脸识别验证
  5. java os库_java-Mac OS X上的JNotify?
  6. oracle日志文件大小规则,在线重做Oracle日志文件大小
  7. 在idae中为什么用Module创建一个新的Maven项目的时候会被卡死
  8. 「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
  9. [JavaWeb-HTML]HTML标签_文件标签
  10. [Java基础]Stream流的收集操作