先找出第二类斯特林数的公式,然后把公式分解成卷积的形式,先做一遍NTT,然后对于每次询问只要用线段树求出有多少个空闲的房间就可以了。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;#define lson o << 1, L, mid
#define rson o << 1 | 1, mid+1, R
#define ls o << 1
#define rs o << 1 | 1
const int maxn = 300005;
const int mod = 880803841;LL powmod(LL a, LL b, LL p)
{LL base = a, res = 1;while(b) {if(b % 2) res = res * base % p;base = base * base % p;b /= 2;}return res;
}namespace NTT {const int r = 26, gl = 25;LL p, rp[50], irp[50];void setMod(LL _p = 880803841) {p = _p;for(int i = 0; i < gl; i++) rp[i] = powmod(r, (p-1)/(1<<i), p);}void FFT(LL a[], int n, LL wt[] = rp){for(int i = 0, j = 0; i < n; i++) {if(j > i) swap(a[i], a[j]);int k = n;while(j & (k >>= 1)) j &= ~k;j |= k;}for(int m = 1, b = 1; m < n; m<<=1, b++)for(int k = 0, w = 1; k < m; ++k) {for(int i = k; i < n; i += m<<1) {int v = a[i+m] * w % p;if((a[i+m] = a[i] - v) < 0) a[i+m] += p;if((a[i] += v) >= p) a[i] -= p;}w = w * wt[b] % p;}}void IFFT(LL a[], int n) {for(int i = 0; i < gl; i++) irp[i] = powmod(rp[i], n-1, p);FFT(a, n, irp);LL inv = powmod(n, p-2, p);for(int i = 0; i < n; i++) a[i] = a[i] * inv % p;}void Mul(LL a[], LL b[], LL n, LL c[]) {FFT(a, n);FFT(b, n);for(int i = 0; i < n; i++) c[i] = a[i] * b[i] % p;IFFT(c, n);}
}LL a[maxn];
LL b[maxn];
LL c[maxn];
int sum[100005 << 2];
int lazy[100005 << 2];void pushup(int o)
{sum[o] = sum[ls] + sum[rs];
}void pushdown(int o, int L, int R)
{if(lazy[o]) {int mid = (L + R) >> 1;sum[ls] = (mid - L + 1) - sum[ls];sum[rs] = (R - mid) - sum[rs];lazy[ls] ^= lazy[o];lazy[rs] ^= lazy[o];lazy[o] = 0;}
}void build(int o, int L, int R)
{lazy[o] = 0;if(L == R) {sum[o] = 1;return;}int mid = (L + R) >> 1;build(lson);build(rson);pushup(o);
}void update(int o, int L, int R, int ql, int qr)
{if(ql <= L && qr >= R) {sum[o] = (R - L + 1) - sum[o];lazy[o] = lazy[o] ^ 1;return;}pushdown(o, L, R);int mid = (L + R) >> 1;if(ql <= mid) update(lson, ql, qr);if(qr > mid) update(rson, ql, qr);pushup(o);
}void work()
{int N, m, D;scanf("%d%d%d", &N, &m, &D);memset(a, 0, sizeof a);memset(b, 0, sizeof b);int n = 1;while(N >= n) n *= 2;a[0] = 1;for(int i = 1; i <= N; i++) a[i] = a[i-1] * i % mod;for(int i = 0; i <= N; i++) a[i] = b[i] = powmod(a[i], mod - 2, mod);for(int i = 1; i <= N; i+=2) a[i] = a[i] * (mod - 1) % mod;for(int i = 0; i <= N; i++) b[i] = b[i] * powmod(i, N, mod) % mod;n = n * 2;NTT::setMod();NTT::Mul(a, b, n, c);build(1, 1, m);while(D--) {int ql, qr;scanf("%d%d", &ql, &qr);update(1, 1, m, ql, qr);int t = sum[1];printf("%lld\n", c[t]);}
}int main()
{int _;scanf("%d", &_);while(_--) work();return 0;
}

【NTT】 ZOJ 3899 State Reversing相关推荐

  1. ZOJ 3899 State Reversing【NTT】

    题意: 有N(有序号)个怪兽,给出M(1-M)个房间,每个房间的初始状态为1,接下来有D次操作,每次操作是选择一个区间使得区间内房间的状态反转(0->1 , 1->0),每次操作后计算将这 ...

  2. 【翻译】What is State Machine Diagram(什么是状态机图)?

    [翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图, ...

  3. 【推导】【NTT】hdu6061 RXD and functions(NTT)

    题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...

  4. AT2064-[AGC005F]Many Easy Problems【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2064 题目大意 给出nnn个点的一棵树,对于k∈[1,n]k\in[1,n]k∈[1,n]求出所有kkk个点的 ...

  5. 牛客挑战赛53G-同源数组(Easy Version)【NTT】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11193/G 题目大意 给出nnn个长度为mmm的数组,然后你每次可以进行差分(不会改变数组长度那种)和前缀和 ...

  6. P6800-[模板]Chirp Z-Transform【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/P6800 题目大意 给出一个nnn此多项式PPP,对于k∈[0,m−1]k\in[0,m-1]k∈[0,m−1]所有 ...

  7. CF1251F-Red-White Fence【NTT】

    前言 刚开始看错题推了半天的生成函数 正题 题目链接:https://www.luogu.com.cn/problem/CF1251F 题目大意 nnn个白色木板,kkk个红色木板,给出这些木板的高度 ...

  8. [2020.11.4NOIP模拟赛]简单的打击【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/U138580 题目大意 两个长度为nnn的序列,要求重排后同位置的相加后众数的个数最多. 解题思路 定义aia_ia ...

  9. jzoj4051-序列统计【NTT】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3017/2 题目大意 求有多少个长度为nnn的序列使得 都是在集合SSS中的数 这些数的乘积%m=x\% ...

最新文章

  1. HDU4160(最小路径覆盖问题)
  2. 2D平台游戏王牌英雄的AI寻路解决方案
  3. formal timetable for cambridge
  4. 算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)
  5. 【个人感悟】效率,天道酬勤
  6. 音视频同步系列文章之------时间戳与时间尺度(time scale)
  7. Python之路【第八篇】:堡垒机实例以及数据库操作
  8. word修改一处另一处自动修改_这么做让word自动记录修改明细,再也不用一个字一个字的核对了...
  9. 固定利率加密借贷协议Notional Finance完成1000万美元A轮融资,Pantera Capital领投
  10. 软件项目经理的心得和经验总结
  11. python如何加载图片_python如何导入图片
  12. 如何配置YUM本地更新源
  13. shell批量文件编码转换
  14. html与css基础教程:CSS构造块
  15. 解决Tomcat中文乱码
  16. csapp--键盘驱动程序的分析与修改
  17. Docker 目录/var/lib/docker/containers文件过大
  18. ad9854matlab仿真,AD9854 | 直接数字频率合成器 | 亚德诺(ADI)半导体
  19. markdown 入门 - 这样就够用了
  20. 数论-FTT 和 NTT

热门文章

  1. c语言乐谱,单片机c语言一闪一闪亮晶晶的乐谱程序
  2. SaaSBase:推荐七款超好用的大数据分析工具
  3. 智能烧水壶(WIFI版)05——水温调节和灯光提示功能实现篇
  4. 初中生学计算机学编程,初中生学编程杂谈(1)
  5. 硬件设计15---什么是HDMI驱动器?
  6. elasticsearch Trying to create too many buckets
  7. 布局中Button总是显示在最顶层问题
  8. loadrunner常见报错解决
  9. 4.1 深度学习框架-TensorFlow
  10. 实施顾问的价值如何体现?