4364: [IOI2014]wall砖墙
4364: [IOI2014]wall砖墙
分析:
线段树,维护一个最大值,一个最小值。
代码:
#include<bits/stdc++.h> char buf[],*p1 = buf,*p2 = buf;
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2) ? EOF :*p1++)
inline int read() {
int x=,f=;char ch=nc();for(;!isdigit(ch);ch=nc())if(ch=='-')f=-;
for (;isdigit(ch);ch=nc())x=x*+ch-'';return x*f;
} const int N = ;
int mn[N<<],mx[N<<]; #define max(a,b) a>b?a:b
#define min(a,b) a>b?b:a
#define Root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1 inline void pushup(int rt) {
mn[rt] = min(mn[rt<<],mn[rt<<|]);
mx[rt] = max(mx[rt<<],mx[rt<<|]);
}
inline void pushdown(int rt) { // 使左右儿子的最小最大值 也在 根节点的最小最大值之间。
if (mn[rt] > mx[rt<<]) mn[rt<<] = mx[rt<<] = mn[rt];
else if (mn[rt] > mn[rt<<]) mn[rt<<] = mn[rt];
if (mn[rt] > mx[rt<<|]) mn[rt<<|] = mx[rt<<|] = mn[rt];
else if (mn[rt] > mn[rt<<|]) mn[rt<<|] = mn[rt]; if (mx[rt] < mn[rt<<]) mn[rt<<] = mx[rt<<] = mx[rt];
else if (mx[rt] < mx[rt<<]) mx[rt<<] = mx[rt];
if (mx[rt] < mn[rt<<|]) mn[rt<<|] = mx[rt<<|] = mx[rt];
else if (mx[rt] < mx[rt<<|]) mx[rt<<|] = mx[rt];
}
void update1(int l,int r,int rt,int L,int R,int h) { // 提高
if (L <= l && r <= R) {
mn[rt] = max(mn[rt],h); // 取max:高于h的不更新
mx[rt] = max(mx[rt],h);
return ;
}
pushdown(rt);
int mid = (l + r) >> ;
if (L <= mid) update1(lson,L,R,h);
if (R > mid) update1(rson,L,R,h);
pushup(rt);
}
void update2(int l,int r,int rt,int L,int R,int h) { // 降低
if (L <= l && r <= R) {
mn[rt] = min(mn[rt],h); // 取min:低于h的不更新
mx[rt] = min(mx[rt],h);
return ;
}
pushdown(rt);
int mid = (l + r) >> ;
if (L <= mid) update2(lson,L,R,h); // -- update1
if (R > mid) update2(rson,L,R,h);
pushup(rt);
}
void print(int l,int r,int rt) {
if (l == r) {
printf("%d\n",mn[rt]);
return;
}
int mid = (l + r) >> ;
pushdown(rt);
print(lson);print(rson);
}
int main() {
int n = read(),m = read();
while (m--) {
int opt = read(),l = read() + ,r = read() + ,h = read();
if (opt==) update1(Root,l,r,h);
else update2(Root,l,r,h);
}
print(Root);
return ;
}
4364: [IOI2014]wall砖墙的更多相关文章
- bzoj4364: [IOI2014]wall砖墙
线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...
- BZOJ4364: [IOI2014]wall砖墙(线段树)
题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列 ...
- 【[IOI2014]Wall 砖墙】
好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用 ...
- P4560 [IOI2014]Wall 砖墙
题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...
- LUOGU P4560 [IOI2014]Wall 砖墙 (线段树)
传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #inc ...
- [IOI2014]Wall
[IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...
- 「IOI2014」Wall 砖墙
题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h ...
- BZOJ4364:[IOI2014]Wall
浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- libxml2用xpath进行查找
xml文档 <?xml version="1.0" encoding="UTF-8"?> <radios> <radio> ...
- bzoj2004 [Hnoi2010]公交线路
Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决 ...
- maven项目发布到Tomcat丢失jar包
昨天看了一篇tomcat设置的文章,说要把第一个勾上,这样不需要更新到tomcat. 一启动tomcat就发现丢包.后来在网上看了许多文章,说要update maeven项目,然后你就会发现启动过程 ...
- 【洛谷P2168】[NOI2015]荷马史诗
荷马史诗 建一个k叉哈夫曼树,用堆维护一下 // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #inc ...
- webstorm开发nodejs的技巧--代码提示DefinitelyTyped
先发视频“WebStorm - MEAN Stack Walkthrough and Tips”,地址:http://www.tudou.com/programs/view/txhBUA7fcNA/? ...
- Unity3d Gis 坐标转换
最近在做unity3d与Gis结合的项目,最基本的就是坐标的转换问题,比如把经纬度为(166.23.9.27 , 39.55.15.74) 转换到unity里面成相应的位置点,废话不多说 上代码: u ...
- H5面试题整理
1.新的HTML5文档类型和字符集是? 文档类型:<!doctype html> 使用UTF-8编码示例:<meta charset="UTF-8"> 2. ...
- Django-rest-framework(三)view and viewsets使用
DRF 中有多种view和viewsets,我整理了一下,如下图所示,接下来,我们分别了解下view,viewsets. APIView 所有的view,viewsets都是继承APIView,而AP ...
- 工具类(为控件设置圆角) - iOS
为了便于日常开发效率,因此创建了一些小的工具类便于使用.具体 code 如下:声明: /* 为控件添加边框样式_工具类 */ #import <UIKit/UIKit.h> typedef ...
- ios appstore 上架应用被拒绝原因
ios appstore 上架应用被拒绝原因 应用程序崩溃 界面布局有明显错误挂羊头卖狗头的应用包括未公开的或隐藏功能的使用私有API应用程序读取或写入数据超出其指定的容器区域以任何方式下载代码的应用 ...