【[IOI2014]Wall 砖墙】
好像随便一卡就最优解了
malao告诉我这道题挺不错的,于是就去写了写
这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧
但是并没有什么区间查询,只是在最后输出整个序列
于是我们就直接用线段树维护
设置两个标记\(tag[0],tag[1]\),分别表示对应区间的最小值和最大值
初始值我们分别设成\(-inf\)和\(inf\)
之后我们分别维护就好了
如果是\(1\)操作我们要把区间的最小值更新,但是如果原来区间的最小值大于当前的值,那么就不更新
同时如果这个区间的最大值比需要更新的值还小,那么最大值也一起更新
操作\(2\)还有标记下放同理
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 2000005
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define INF 100002
int l[maxn<<2],r[maxn<<2],tag[2][maxn<<2];
int n,Q;
void write(int x)
{
if(x>9) write(x/10);
putchar(x%10+48);
}
inline int read()
{
char c=getchar();
int x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
void build(int x,int y,int i)
{
l[i]=x,r[i]=y;
if(x==y) return;
int mid=x+y>>1;
build(x,mid,i<<1),build(mid+1,y,i<<1|1);
tag[1][i]=INF,tag[0][i]=-INF;
}
inline void pushdown(int i)
{
if(tag[0][i]!=-INF)
{
tag[0][i<<1]=max(tag[0][i],tag[0][i<<1]);
tag[1][i<<1]=max(tag[1][i<<1],tag[0][i]);
tag[0][i<<1|1]=max(tag[0][i],tag[0][i<<1|1]);
tag[1][i<<1|1]=max(tag[1][i<<1|1],tag[0][i]);
tag[0][i]=-INF;
}
if(tag[1][i]!=INF)
{
tag[1][i<<1]=min(tag[1][i],tag[1][i<<1]);
tag[0][i<<1]=min(tag[0][i<<1],tag[1][i]);
tag[1][i<<1|1]=min(tag[1][i<<1|1],tag[1][i]);
tag[0][i<<1|1]=min(tag[0][i<<1|1],tag[1][i]);
tag[1][i]=INF;
}
}
void change(int op,int val,int x,int y,int i)
{
if(x<=l[i]&&y>=r[i])
{
if(op)
{
if(val<tag[op][i]) tag[op][i]=val;
if(tag[0][i]>val) tag[0][i]=val;
}
if(!op)
{
if(val>tag[op][i]) tag[op][i]=val;
if(tag[1][i]<val) tag[1][i]=val;
}
return;
}
pushdown(i);
int mid=l[i]+r[i]>>1;
if(y<=mid) change(op,val,x,y,i<<1);
else if(x>mid) change(op,val,x,y,i<<1|1);
else change(op,val,x,y,i<<1),change(op,val,x,y,i<<1|1);
}
void print(int i)
{
if(l[i]==r[i])
{
write(tag[0][i]);
putchar(10);
return;
}
pushdown(i);
print(i<<1);
print(i<<1|1);
}
int main()
{
n=read(),Q=read();
build(0,n-1,1);
int opt,x,y,h;
while(Q--)
{
opt=read(),x=read(),y=read(),h=read();
change(opt-1,h,x,y,1);
}
print(1);
return 0;
}
【[IOI2014]Wall 砖墙】的更多相关文章
- 4364: [IOI2014]wall砖墙
4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = ...
- bzoj4364: [IOI2014]wall砖墙
线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...
- BZOJ4364: [IOI2014]wall砖墙(线段树)
题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列 ...
- 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学习 和 Python与C/C++交互
本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者 ...
- java 基础 --- volatile
问题 : volatile 解决的是什么问题 有什么应用场景 概述 某些共享变量的时候我们使用volatile 修饰,它会保证修改的值立即被更新到主存,或是从主存中获取最新的值.它的底层是如何实现的 ...
- Vue 引入第三方js.css的方式
转自:https://blog.csdn.net/csdn_yudong/article/details/78795743 我们以 jQuery 为例,来讲解 一.绝对路径直接引入,全局可用 主入口页 ...
- [LeetCode]Longest Palindromic Substring题解(动态规划)
Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...
- InfluxDB 的用户
InfluxDB 的用户有三种: cluster admin 集群admin database admin 数据库admin database user 数据库用户 cluster admin ...
- eclipse 查看源码 source not found
是因为eclipse里面没有设置好源码路径. 源码路径在jdk安装包里面 C:/Program Files/Java/jdk1.8.0_191/src.zip 这个src.zip文件, 设置ecli ...
- delphi之读写文件的三种方式
一.Tstrings.Tstringlist procedure TForm1.Button2Click(Sender: TObject); var strlist: TStringList; pat ...
- 关键业务系统的JVM参数推荐(2018仲夏版) (强烈推荐 唯品会)
年更贴,因为两年里遇到的事情,一些想法变了.也补充了不少VJTools的内容,比如为伸手党们准备的jvm-options.sh. 在关键的业务系统里,除了继续追求技术人员最爱的高吞吐与低延时之外,系统 ...
- jQuery中判断input的disabled属性
<input type="text" id="ipt1" disabled> <input type="text" id= ...
- 转 VS Code 快捷键大全,没有更全
VS Code折腾记 - (2) 快捷键大全,没有更全 前言 VSCode的快捷键继承了一些IDE风格,有VS的身影,也有Emacs的身影..简言之,内置快捷键玩熟了,效率提高不是一点两点. VsCo ...