线段树背诵用模板
来源:互联网 发布:php 类魔术方法 编辑:程序博客网 时间:2024/05/17 09:13
#include <cstdio>#define lson o<<1, l, m#define rson o<<1|1, m+1, rtypedef long long LL;const int maxn = 100005; int n, a, b, c, k, q;LL sum[maxn<<2], add[maxn<<2], mul[maxn<<2], p; void up(int o) { sum[o] = (sum[o<<1]+sum[o<<1|1]) %p;} void build(int o, int l, int r) { add[o] = 0, mul[o] = 1; if(l == r) { scanf("%lld", &sum[o]); return; } int m = (l+r) >> 1; build(lson); build(rson); up(o);} void down(int o, int len) { // if(add[o] != 0 && mul[o] != 1) { add[o<<1] = (add[o<<1] * mul[o] + add[o]) %p; add[o<<1|1] = (add[o<<1|1] * mul[o] + add[o]) %p; mul[o<<1] = mul[o<<1] * mul[o] %p; mul[o<<1|1] = mul[o<<1|1] * mul[o] %p; sum[o<<1] = (sum[o<<1] * mul[o] + add[o] * (len-(len>>1))) %p; sum[o<<1|1] = (sum[o<<1|1] * mul[o] + add[o] * (len>>1)) %p; add[o] = 0, mul[o] = 1; // }} void update(int o, int l, int r, int op) { if(a <= l && r <= b) { if(op == 1) { add[o] = add[o]*c %p; mul[o] = mul[o]*c %p; sum[o] = sum[o]*c %p; } else { add[o] = (add[o] + c) %p; sum[o] = (sum[o] + (LL)c*(r-l+1)) %p; } return; } down(o, r-l+1); int m = (l+r) >> 1; if(a <= m) update(lson, op); if(m < b ) update(rson, op); up(o);} LL query(int o, int l, int r) { if(a <= l && r <= b) return sum[o] %p; down(o, r-l+1); int m = (l+r) >> 1; LL ans = 0; if(a <= m) ans = query(lson); if(m < b ) ans += query(rson); return ans %p;} int main(){ scanf("%d%lld", &n, &q);scanf("%d", &p); build(1, 1, n); while(q--) { scanf("%d%d%d", &k, &a, &b); if(k != 3) { scanf("%d", &c); update(1, 1, n, k); } else printf("%lld\n", query(1, 1, n)); } return 0;}
0 0
- 线段树背诵用模板
- 树的重心 背诵用模板
- dinic背诵用模板
- manacher 背诵用模板
- 树状数组背诵用模板
- ac自动机背诵用模板
- 哈希背诵用模板
- 扩展lucas背诵用模板
- 后缀数组背诵用模板
- 旋转卡壳 背诵用模板
- 最小费用最大流背诵用模板
- k-d tree背诵用模板
- 欧拉函数、中国剩余定理背诵用模板
- ACM 线段树模板(模板)
- 线段树模板
- hdu_1166_线段树模板
- 线段树模板
- 线段树模板 poj2777
- gulp基本用法
- USACO1.3 修理牛棚 Barn Repair
- C++如何设计一个不含指针的类 (Boolan笔记第一周)
- c#画平行线和垂线的代码
- java IO总结之文件
- 线段树背诵用模板
- Android Studio Gradle打包实践之多渠道+版本号管理
- 常用SQL查询语句
- MFC:调用Invalidate()的作用
- spring maven 搭建dubbo框架 服务端
- [Android开发] EventBus3 使用方法教程总结
- running android lint has encountered a problem
- 先锋机器人学习笔记_1-3 2d 建模和 Mapper 地图编辑器
- SQL查询语句关键字方法