洛谷——P2801 教主的魔法(线段树or分块)
P2801 教主的魔法
(1) 若第一个字母为“M”,则紧接着有三个数字L、R、W。表示对闭区间 [L, R] 内所有英雄的身高加上W。
(2) 若第一个字母为“A”,则紧接着有三个数字L、R、C。询问闭区间 [L, R] 内有多少英雄的身高大于等于C。
线段树大法好
维护区间$max$和区间$min$
修改,正常修改即可,push_up操作修改的也只是区间最大值和最小值
关键在于查找,若当前区间的最大值$<=$所要查询的值,返回0
若当前区间的最小值$>=$所要查询的值,返回$r-l+1$
想不到啊,维护区间最大值和最小值还能进行这样的骚操作啊,还是太蒟了。。。qwq
这题分块可做,可蒟蒻(博主)不会啊。。。
#include<bits/stdc++.h> #define N 10000000
using namespace std; struct Segment{
int l,r,mw,mi,f;
}tr[N]; void push_up(int k){
tr[k].mi=min(tr[k<<].mi,tr[k<<|].mi);
tr[k].mw=max(tr[k<<].mw,tr[k<<|].mw);
} void build(int k,int l,int r){
tr[k].l=l,tr[k].r=r;
if(l==r) {scanf("%d",&tr[k].mi),tr[k].mw=tr[k].mi;return;}
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
push_up(k);
} void push_down(int k){
if(tr[k].f){
int f=tr[k].f;
tr[k<<].mi+=f,tr[k<<].mw+=f;
tr[k<<].f+=f,
tr[k<<|].mi+=f,tr[k<<|].mw+=f;
tr[k<<|].f+=f,
tr[k].f=;
}
} void update(int k,int ql,int qr,int f){
int l=tr[k].l,r=tr[k].r,mid=(l+r)>>;
if(l>=ql&&r<=qr) {tr[k].mi+=f,tr[k].mw+=f;tr[k].f+=f;return;}
push_down(k);
if(ql<=mid) update(k<<,ql,qr,f);
if(qr>mid) update(k<<|,ql,qr,f);
push_up(k);
} int query(int k,int ql,int qr,int val){
int l=tr[k].l,r=tr[k].r,mid=(l+r)>>;
if(l>=ql&&r<=qr&&tr[k].mi>=val) return r-l+;
if(l>=ql&&r<=qr&&tr[k].mw<val) return ;
push_down(k);
int ans=;
if(ql<=mid) ans+=query(k<<,ql,qr,val);
if(qr>mid) ans+=query(k<<|,ql,qr,val);
push_up(k);
return ans;
} int n,q; int main()
{
scanf("%d%d",&n,&q);
build(,,n);
for(int l,r,x,i=;i<=q;i++){
char p;
cin>>p;
scanf("%d%d%d",&l,&r,&x);
if(p=='M') update(,l,r,x);
else{
printf("%d\n",query(,l,r,x));
}
} return ;
}
洛谷——P2801 教主的魔法(线段树or分块)的更多相关文章
- P2801 教主的魔法 (线段树)
题目 P2801 教主的魔法 解析 成天做水题 线段树,第一问区间加很简单 第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0 ps:求教 ...
- 洛谷 P2801 教主的魔法 解题报告
P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...
- 洛谷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 教主的魔法 题解
题面 刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~) 本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念: #inc ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- [洛谷P2801]教主的魔法
题目大意:有$n$个数,$q$个操作.两种操作: $M\;l\;r\;w:$把$[l,r]$所有数加上$w$ $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数. 题解:分块,对 ...
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
随机推荐
- SQLyog普通版与SQLyog企业版对比分析
这里,为什么要写这篇博客呢? 对于SQLyog普通版而言,只能复制到不同的数据库里,这样显得麻烦,当然,你也可以用语句来操作达到实现目的. 具体做法: MySQL复制旧表的结构及数据到新表 CREAT ...
- 推理集 —— death
事故: 自杀: 他杀: 1. 跳楼 头向下死得比较快,没那么痛苦. 脚向下,不会立刻死亡,痛苦至极.死亡原因可能不是跳楼,而是失血过多而死 扑下去, 同头向下. 仰着跌下去,同头向下.. 跳楼最好头先 ...
- openstack network:dhcp binding fail
- SpringBoot中使用spring-data-jpa 数据库操作(上)
Java客户端使用Spring-Data-Jpa这个组件. Spring-Data-Jpa就是Spring对Hibernate的一个整合. 选择create在运行的时候它会自动帮我们创建一个表. sp ...
- bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场【bfs】
不是严格小于是小于等于啊!!!!!不是严格小于是小于等于啊!!!!!不是严格小于是小于等于啊!!!!! 是我看不懂人话还是翻译不说人话= = 把所有格子按值排个序,bfs扩展打标记即可 #includ ...
- 10.19NOIP模拟赛(DAY2)
/* 正解O(n)尺取法orz 我写的二分答案.本来以为会被卡成暴力分...... 这个-'0'-48是我写的吗........我怎么不记得... */ #include<bits\stdc++ ...
- [Swift通天遁地]一、超级工具-(14)使用SweetAlert制作漂亮的自定义Alert窗口
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- js 事件循环机制 EventLoop
js 的非阻塞I/O 就是由事件循环机制实现的 众所周知 js是单线程的 也就是上一个任务完成后才能开始新的任务 那js碰到ajxa和定时器.promise这些异步任务怎么办那?这时候就出现了事件 ...
- 第八届河南省省赛 A.挑战密室
挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...
- [转]URL最大长度问题
本文转自:http://www.cnblogs.com/henryhappier/archive/2010/10/09/1846554.html 今天在测试Email Ticket的时候发现在进行Ma ...