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 ...
随机推荐
- python:验证客户端链接的合法性与socketserver
一.验证客户端链接的合法性 from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_a ...
- hyper-net、ion、skip connection、fpn
resnet的skip connection用的也是eltwise相加 fpn的浅层和高层融合用的eltwise相加 hyper-net和ion都是使用的concat的方式 hyper-net网络结构 ...
- 【luogu P4462 [CQOI2018]异或序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P4462 ax+ax-1+...+ay = cntx+cnty 这样把一段序列变成两段相加跑莫队. #inclu ...
- POJ 3616 Milking Time(加掩饰的LIS)
传送门: http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- How to Create a Basic Plugin
Sometimes you want to make a piece of functionality available throughout your code. For example, per ...
- 促销规则 promotion rule
参考:http://www.cnblogs.com/winstonyan/archive/2012/10/29/b2c_research_promotion_engine_and_rule_1.htm ...
- 移动端Vue回到顶部
html: <div class="totop" id="totop" @click="Top" v-show="totop ...
- 搭建Hadoop2.6.0+Eclipse开发调试环境
上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna ...
- Oracle oerr工具介绍
(1)什么是oerr oerr是Oracle提供的在UNIX/Linux上查看Oracle错误的小工具,使用起来非常方便. (2)如何使用 oerr工具位于ORACLE_HOME下面,可以使用whic ...
- MySQL表结构(含数据类型、字段备注注释)导出成Excel
方法一: 1.用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...