P2801 教主的魔法 (线段树)
题目
解析
成天做水题
线段树,第一问区间加很简单
第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0
ps:求教指针线段树,我的空间怎么那么大
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 10;
int n, m, num;
int a[N];
class tree {
public :
int mx, mn, sum;
int lazy, len;
tree *ls, *rs;
tree() {
sum = mx = mn = lazy = len = 0;
ls = rs = NULL;
}
} t[N];
template<class T>inline void read(T &x) {
x = 0; int f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
x = f ? -x : x;
return;
}
inline void pushup(tree *rt) {
rt->mn = min(rt->ls->mn, rt->rs->mn);
rt->mx = max(rt->ls->mx, rt->rs->mx);
}
void build(int l, int r, tree *rt) {
rt->len = r - l + 1;
if (l == r) {
rt->mn = rt->mx = a[l];
return;
}
rt->ls = &t[++num], rt->rs = &t[++num];
int m = (l + r) >> 1;
build(l, m, rt->ls), build(m + 1, r, rt->rs);
pushup(rt);
}
inline void pushdown(tree *rt) {
if (rt->lazy) {
rt->ls->mx += rt->lazy;
rt->rs->mx += rt->lazy;
rt->ls->mn += rt->lazy;
rt->rs->mn += rt->lazy;
rt->ls->lazy += rt->lazy;
rt->rs->lazy += rt->lazy;
rt->lazy = 0;
}
}
void update(int L, int R, int c, int l, int r, tree *rt) {
if (L <= l && r <= R) {
rt->mn += c;
rt->mx += c;
rt->lazy += c;
return;
}
pushdown(rt);
int m = (l + r) >> 1;
if (L <= m) update(L, R, c, l, m, rt->ls);
if (R > m) update(L, R, c, m + 1, r, rt->rs);
pushup(rt);
}
int query(int L, int R, int c, int l, int r, tree *rt) {
if (L <= l && r <= R && rt->mn >= c) return rt->len;
if (L <= l && r <= R && rt->mx < c) return 0;
pushdown(rt);
int m = (l + r) >> 1, ans = 0;
if (L <= m) ans += query(L, R, c, l, m, rt->ls);
if (R > m) ans += query(L, R, c, m + 1, r, rt->rs);
return ans;
}
int main() {
read(n), read(m);
for (int i = 1; i <= n; ++i) read(a[i]);
tree *rt = new tree;
build(1, n, rt);
for (int i = 1, x, y, z; i <= m; ++i) {
char c;
cin >> c;
read(x), read(y), read(z);
if (c == 'M')
update(x, y, z, 1, n, rt);
else
printf("%d\n", query(x, y, z, 1, n, rt));
}
delete rt;
return 0;
}
P2801 教主的魔法 (线段树)的更多相关文章
- 洛谷——P2801 教主的魔法(线段树or分块)
P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...
- P2801 教主的魔法(分块)
P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...
- 洛谷 P2801 教主的魔法 解题报告
P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...
- 洛谷P2801 教主的魔法 [分块,二分答案]
题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...
- 魔法 [线段树优化DP]
也许更好的阅读体验 \(\mathcal{Description}\) 小 \(D\) 正在研究魔法. 小 \(D\) 得到了远古时期的魔法咒语 \(S\),这个咒语共有 \(n\) 个音节,每个音节 ...
- luogu P2801 教主的魔法
题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...
- 洛谷 P2801 教主的魔法
题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- P2801 教主的魔法
传送门 $N$ 太大了主席树过不了 考虑分块 对每个块内的元素排序,询问就对大块二分查找,对两边小的部分暴力枚举 修改时维护 $add[i]$ 标记,维护当前块内整块已经加的数 那么整块的就直接修改 ...
随机推荐
- window系统对应默认IE浏览器版本
- oc界面开发整理
oc界面开发整理 ViewController.h from test82 #import <UIKit/UIKit.h> @interface ViewController : UIVi ...
- unzip解压失败( cannot find zipfile directory)
本文链接:https://blog.csdn.net/yori_chen/article/details/80493383[root@localhost soft]# unzip QY.zip Arc ...
- ZooKeeper相关资料集锦
1.ZooKeeper相关概念总结 https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/framework/Z ...
- pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- 将innodb置为只读模式
1.关闭change bufferset global.innodb_change_buffering=0; 2.将mysql执行slow shutdown(即干净关闭)set global.inno ...
- 软件开发的podcast
目录 中文 喜马拉雅 https://www.ximalaya.com/ SingularFM 8个开发者值得一听的英文 Podcast https://zhuanlan.zhihu.com/p/24 ...
- url的长度问题
url最长支持多少字符? 在http协议中,其实并没有对url长度作出限制,往往url的最大长度和用户浏览器和Web服务器有关,不一样的浏览器,能接受的最大长度往往是不一样的,当然,不一样的Web服务 ...
- 图片放大神器: waifu2x
在线版可以在这个地址上使用:http://waifu2x.udp.jp/index.zh-CN.html , 但是在线版最大图片为5M,最大上传分辨率为1500*1500,且最大放大倍数为2倍,还是有 ...
- 使用bugly热更新时自定义升级弹窗的UI样式
项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗. 不过UI小姐姐说弹窗太丑了,要自定义. bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/us ...