洛谷——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 求出某区间每一个数的和 输入格式 第一 ...
随机推荐
- eventkeyboardmouse
http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml
- go10---struct
package main import ( "fmt" ) type test struct{} //空的结构体 type person struct { name string ...
- HTTP请求错误码大全(转)
一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...
- bzoj2466
高斯消元+搜索 很明显每个开关只能按一次,那么我们可以想到高斯消元,其实就是解异或方程组,但是最后会有一些自由元,也就是有x+y=z,x+y=z这种一样的方程就会产生自由元,那么我们爆搜自由元取值,每 ...
- 将数据从数据仓库Hive导入到MySQL
1.启动Hadoop,hive,mysql 2.在mysql中建表(需要导入数据的) mysql> CREATE TABLE `dbtaobao`.`user_log` (`user_id` v ...
- 洛谷P4397 [JLOI2014]聪明的燕姿
传送门 dfs的时候莫名其妙深度太大过不了……然后死活找不出哪里错…… 首先,约数和这东西是个积性函数,或者直接点的话就是如果$$n=p_1^{a_1}p_2^{a_2}p_3^{a_3}…p_m^{ ...
- Poj 3177 Redundant Paths (双连通分支+节点统计)
题目描述: 给出一个无向的连通图,问最少加入几条边,才能使所给的图变为无桥的双连通图? 解题思路: 可以求出原图中所有的不包含桥的所有最大连通子图,然后对连通子图进行标记缩点,统计度为1的叶子节点le ...
- iOS基础笔试题 - 集锦一
前言 下文转载自https://mp.weixin.qq.com/s?__biz=MzA4ODk0NjY4NA==&mid=454115946&idx=1&sn=c7f1b50 ...
- Python :用两个栈实现队列
转自:http://blog.csdn.net/Lynette_bb/article/details/75092745 牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队 ...
- Android基础TOP4_2:弹窗式选择列表
Activity: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...