[Luogu] 维护序列
https://www.luogu.org/problemnew/show/P2023
线段树双懒标记下放
#include <bits/stdc++.h> using namespace std;
const int N = 1e5 + ; #define LL long long
#define lson jd << 1
#define rson jd << 1 | 1 LL w[N << ], size[N << ], fadd[N << ], fmul[N << ], Answer;
int n, Ty, Mod; #define gc getchar() inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} void Build_tree(int l, int r, int jd) {
size[jd] = (r - l + ); fmul[jd] = ;
if(l == r) {w[jd] = read(); w[jd] %= Mod; return ;}
int mid = (l + r) >> ;
Build_tree(l, mid, lson);
Build_tree(mid + , r, rson);
w[jd] = (w[lson] + w[rson]) % Mod;
} void Down(int jd) {
if(!fadd[jd] && fmul[jd] == ) return ;
w[lson] = w[lson] * fmul[jd] % Mod;
w[rson] = w[rson] * fmul[jd] % Mod;
w[lson] = w[lson] + fadd[jd] * size[lson] % Mod;
w[rson] = w[rson] + fadd[jd] * size[rson] % Mod;
fadd[lson] = (fadd[lson] * fmul[jd] + fadd[jd]) % Mod;
fadd[rson] = (fadd[rson] * fmul[jd] + fadd[jd]) % Mod;
fmul[lson] = fmul[lson] * fmul[jd] % Mod;
fmul[rson] = fmul[rson] * fmul[jd] % Mod;
fadd[jd] = ;
fmul[jd] = ;
} void Sec_G_mul(int l, int r, int jd, int x, int y, int imp) {
if(x <= l && r <= y) {
w[jd] = (w[jd] * imp) % Mod;
fmul[jd] = (fmul[jd] * imp) % Mod;
fadd[jd] = (fadd[jd] * imp) % Mod;
return ;
}
Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_G_mul(l, mid, lson, x, y, imp);
if(y > mid) Sec_G_mul(mid + , r, rson, x, y, imp);
w[jd] = (w[lson] + w[rson]) % Mod;
} void Sec_G_add(int l, int r, int jd, int x, int y, int k) {
if(x <= l && r <= y) {
w[jd] = (w[jd] + size[jd] * k) % Mod;
fadd[jd] = (fadd[jd] + k) % Mod;
return ;
}
Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_G_add(l, mid, lson, x, y, k);
if(y > mid) Sec_G_add(mid + , r, rson, x, y, k);
w[jd] = (w[lson] + w[rson]) % Mod;
} void Sec_A(int l, int r, int jd, int x, int y) {
if(x <= l && r <= y) {
Answer += w[jd];
if(Answer >= Mod) Answer %= Mod;
return ;
}
Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_A(l, mid, lson, x, y);
if(y > mid) Sec_A(mid + , r, rson, x, y);
} int main() {
n = read(); Mod = read();
Build_tree(, n, );
Ty = read();
while(Ty --) {
int opt = read();
if(opt == ) {
int x = read(), y = read(), k = read(); k %= Mod;
Sec_G_mul(, n, , x, y, k);
} else if(opt == ) {
int x = read(), y = read(), k = read(); k %= Mod;
Sec_G_add(, n, , x, y, k);
} else {
int x = read(), y = read();
Answer = ;
Sec_A(, n, , x, y);
cout << Answer << endl;
}
}
return ;
}
/*
5 38
5 4 2 3
1 4 1
2 5
2 4 2
3 5 5
1 4
*/
[Luogu] 维护序列的更多相关文章
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- bzoj 维护序列seq(双标记线段树)
Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 4184 Solved: 1518[Submit][Status][Discus ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 1798: [Ahoi2009]Seq 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2930 Solved: 1087[Submit ...
- BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
- Letters Removing CodeForces - 899F (线段树维护序列)
大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 7773 Solved: 2792[Submit ...
随机推荐
- PAT题目AC汇总(待补全)
题目AC汇总 甲级AC PAT A1001 A+B Format (20 分) PAT A1002 A+B for Polynomials(25) PAT A1005 Spell It Right ( ...
- PHP学习之PHP trait解析
自PHP5.4.0起,PHP实现了一种代码复用的方法,称为trait. 众所周知,PHP中是单继承的,trait是为类似PHP的单继承语言而准备得一种代码复用机制.trait为了减少单继承语言的限制, ...
- 2.安装阿里yum源
1.删除自带的yum源:#cd /etc/yum.repos.d/#rm -rf * 2.配置远程yum源:wget -O /etc/yum.repos.d/CentOS-Base.repo ht ...
- Grace模式、Saint模式
一.probe(后端探针) 探测后端,确定他们是否健康,返回的状态用req.backend.healthy核对 backend b1 { .host = "127.0.0.1"; ...
- k8s之网络插件flannel及基于Calico的网络策略
1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...
- MQTT协议探究(三)
1 回顾与本次目标 1.1 回顾 主题通配符 主题语义和用法 WireShark进行抓包分析了报文 报文分析: SUBSCRIBE--订阅主题 SUBACK--订阅确认 UNNSUBSCRIBE--取 ...
- mvc 登陆界面+后台代码
上代码 前端+js(懒得分文件了) @{ ViewBag.Title = "MVC权限系统架构学习-登录"; Layout = "/Views/Shared/_LoadJ ...
- python numpy 删除array指定位置的元素
如图:设计一个数组或者tuple,其中的元素是True或False,那么在False位置上的元素就会被删掉 索引的元素还可以是int型的数,这时候就代表,将原来的数组中指定位置的数放在当前的位置,且索 ...
- Windows 查看端口使用、根据pid查找引用程序
1.查看特定端口的使用情况:以80端口为例,输入命令 netstat -aon|findstr "80" 2.根据PID号找到对应的程序:以PID是6776为例,输入命令taskl ...
- vue.js devtools图标不亮
第一步:打开谷歌扩展程序 第二步:设置允许访问文件地址