Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define mod 998244353
  4. #define maxn 400000
  5. #define N 100005
  6. #define setIO(s) freopen(s".in","r",stdin)
  7. using namespace std;
  8. ll qpow(ll base,ll k)
  9. {
  10. ll tmp=1;
  11. while(k)
  12. {
  13. if(k&1) tmp=tmp*base%mod;
  14. base=base*base%mod;
  15. k>>=1;
  16. }
  17. return tmp;
  18. }
  19. void NTT(ll *a,int n,int flag)
  20. {
  21. for(int i=0,k=0;i<n;++i)
  22. {
  23. if(i>k) swap(a[i],a[k]);
  24. for(int j=n>>1;(k^=j)<j;j>>=1);
  25. }
  26. for(int mid=1;mid<n;mid<<=1)
  27. {
  28. ll wn=qpow(3, (mod-1)/(mid<<1)),x,y;
  29. if(flag==-1) wn=qpow(wn,mod-2);
  30. for(int i=0;i<n;i+=(mid<<1))
  31. {
  32. ll w=1;
  33. for(int j=0;j<mid;++j)
  34. {
  35. x=a[i+j],y=w*a[i+j+mid];
  36. a[i+j]=(x+y)%mod,a[i+j+mid]=(x-y+mod)%mod;
  37. w=w*wn%mod;
  38. }
  39. }
  40. }
  41. if(flag==-1)
  42. {
  43. ll rev=qpow(n,mod-2);
  44. for(int i=0;i<n;++i) a[i]=a[i]*rev%mod;
  45. }
  46. }
  47. ll f[maxn],g[maxn],A[maxn],B[maxn];
  48. void solve(int l,int r)
  49. {
  50. if(l==r) return;
  51. int mid=(l+r)>>1,len;
  52. solve(l,mid);
  53. for(len=1;len<=(r-l+1);len<<=1);
  54. for(int i=l;i<=mid;++i) A[i-l]=f[i];
  55. for(int i=1;i<=r-l;++i) B[i-1]=g[i];
  56. NTT(A,len,1),NTT(B,len,1);
  57. for(int i=0;i<len;++i) A[i]=A[i]*B[i]%mod;
  58. NTT(A,len,-1);
  59. for(int i=mid+1;i<=r;++i) f[i]=(f[i]-A[i-l-1]+mod)%mod;
  60. for(int i=0;i<=len;++i) A[i]=B[i]=0;
  61. solve(mid+1,r);
  62. }
  63. void Initialize()
  64. {
  65. f[1]=g[0]=1;
  66. for(int i=1;i<=N;++i) f[i]=g[i]=g[i-1]*i%mod;
  67. }
  68. int main()
  69. {
  70. // setIO("input");
  71. Initialize();
  72. int T,x;
  73. solve(1, 100003);
  74. scanf("%d",&T);
  75. while(T--)
  76. {
  77. scanf("%d",&x);
  78. printf("%lld\n",f[x]);
  79. }
  80. return 0;
  81. }

  

51nod 1514 美妙的序列 分治NTT + 容斥的更多相关文章

  1. 51nod 1514 美妙的序列

    Description 长度为n的排列,且满足从中间任意位置划分为两个非空数列后,左边的最大值>右边的最小值.问这样的排列有多少个%998244353 题面 Solution 正难则反 \(f[ ...

  2. Codeforces 1553I - Stairs(分治 NTT+容斥)

    Codeforces 题面传送门 & 洛谷题面传送门 u1s1 感觉这道题放到 D1+D2 里作为 5250 分的 I 有点偏简单了吧 首先一件非常显然的事情是,如果我们已知了排列对应的阶梯序 ...

  3. 【题解】[HAOI2018]染色(NTT+容斥/二项式反演)

    [题解][HAOI2018]染色(NTT+容斥/二项式反演) 可以直接写出式子: \[ f(x)={m \choose x}n!{(\dfrac 1 {(Sx)!})}^x(m-x)^{n-Sx}\d ...

  4. 51nod 1251 Fox序列的数量 (容斥)

    枚举最多数字的出现次数$k$, 考虑其他数字的分配情况. 对至少$x$种数出现$\ge k$次的方案容斥, 有 $\sum (-1)^x\binom{m-1}{x}\binom{n-(x+1)k+m- ...

  5. 洛谷 P2634 [国家集训队]聪聪可可-树分治(点分治,容斥版) +读入挂+手动O2优化吸点氧才过。。。-树上路径为3的倍数的路径数量

    P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...

  6. 51nod 1518 稳定多米诺覆盖(容斥+二项式反演+状压dp)

    [传送门[(http://www.51nod.com/Challenge/Problem.html#!#problemId=1518) 解题思路 直接算不好算,考虑容斥,但并不能把行和列一起加进去容斥 ...

  7. 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp

    LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...

  8. NTT【51nod】1514 美妙的序列

    题意:1~n 的全排列中,有多少个排列满足任意从中间切成两段后,左边段的最大值大于右边段的最小值? 例如:n为3时有3种 2 3 1 3 1 2 3 2 1 解释:比如 2 3 1 (2) (3 1) ...

  9. BZOJ3771 Triple 【NTT + 容斥】

    题目链接 BZOJ3771 题解 做水题放松一下 先构造\(A_i\)为\(x\)指数的生成函数\(A(x)\) 再构造\(2A_i\)为指数的生成函数\(B(x)\) 再构造\(3A_i\)为指数的 ...

随机推荐

  1. Delphi XE2 之 FireMonkey 入门(3) - 关于 TPosition

    把 FireMonkey 简称为 FM 吧. FM 的窗体继续使用 Left.Top 属性, 但更多控件不是了. //FM 控件的位置控制不再是 Left.Top, 取而代之的是 Position 属 ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_7_File类创建删除功能的方法

    createNewFile() createNewFile抛出了异常 抛出了一个IO异常 所有我们调用方法的时候必须处理异常 throws这个异常 返回结果为true 最终创建好的文件 再次执行代码. ...

  3. shell脚本一一项目5

    主题:一键查看占用内存.cpu高的进程 echo "----------------cpu top 10 list----------------"ps -eo pid,pcpu, ...

  4. Markdown编辑器editor.md的使用

      目录(?)[-] 一Markdown和editormd简介 二editormd的使用 1下载 2简单使用 21在自己的页面上引入相关的css和js代码如下 22在自己的页面中加上DIV 23在同页 ...

  5. web 前端3 javascript基础

    JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一.如何编写 1.J ...

  6. levelDB Block

    http://blog.csdn.net/sparkliang/article/details/8635821 BlockBuilder的接口 首先从Block的构建开始,这就是BlockBuilde ...

  7. Redis主从同步、哨兵、集群

    什么是主从同步(复制) 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点 ...

  8. Redis的持久化存储

    Redis的持久化 Redis 是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题, Redis 提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RD ...

  9. P3188 [HNOI2007]梦幻岛宝珠

    传送门 注意到 $a,b$ 不大 考虑对每一个 $a*2^b$ 的 $b$ 分别背包 设 $f[i][j]$ 表示只考虑 $b=i$ 的物品时,容量为 $j= \sum a$ 的最大价值 这个就是普通 ...

  10. k3 cloud列表中出现很多空白

    解决办法:找到单据体:过滤面板默认隐藏打勾