好像随便一卡就最优解了

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 砖墙】的更多相关文章

  1. 4364: [IOI2014]wall砖墙

    4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = ...

  2. bzoj4364: [IOI2014]wall砖墙

    线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> # ...

  3. BZOJ4364: [IOI2014]wall砖墙(线段树)

    题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列 ...

  4. P4560 [IOI2014]Wall 砖墙

    题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...

  5. LUOGU P4560 [IOI2014]Wall 砖墙 (线段树)

    传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #inc ...

  6. [IOI2014]Wall

    [IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...

  7. 「IOI2014」Wall 砖墙

    题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h ...

  8. BZOJ4364:[IOI2014]Wall

    浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. 总结:Python学习 和 Python与C/C++交互

    本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者 ...

  2. java 基础 --- volatile

    问题  : volatile 解决的是什么问题 有什么应用场景 概述 某些共享变量的时候我们使用volatile 修饰,它会保证修改的值立即被更新到主存,或是从主存中获取最新的值.它的底层是如何实现的 ...

  3. Vue 引入第三方js.css的方式

    转自:https://blog.csdn.net/csdn_yudong/article/details/78795743 我们以 jQuery 为例,来讲解 一.绝对路径直接引入,全局可用 主入口页 ...

  4. [LeetCode]Longest Palindromic Substring题解(动态规划)

    Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...

  5. InfluxDB 的用户

    InfluxDB 的用户有三种: cluster admin   集群admin database admin  数据库admin database user  数据库用户 cluster admin ...

  6. eclipse 查看源码 source not found

    是因为eclipse里面没有设置好源码路径. 源码路径在jdk安装包里面 C:/Program Files/Java/jdk1.8.0_191/src.zip  这个src.zip文件, 设置ecli ...

  7. delphi之读写文件的三种方式

    一.Tstrings.Tstringlist procedure TForm1.Button2Click(Sender: TObject); var strlist: TStringList; pat ...

  8. 关键业务系统的JVM参数推荐(2018仲夏版) (强烈推荐 唯品会)

    年更贴,因为两年里遇到的事情,一些想法变了.也补充了不少VJTools的内容,比如为伸手党们准备的jvm-options.sh. 在关键的业务系统里,除了继续追求技术人员最爱的高吞吐与低延时之外,系统 ...

  9. jQuery中判断input的disabled属性

    <input type="text" id="ipt1" disabled> <input type="text" id= ...

  10. 转 VS Code 快捷键大全,没有更全

    VS Code折腾记 - (2) 快捷键大全,没有更全 前言 VSCode的快捷键继承了一些IDE风格,有VS的身影,也有Emacs的身影..简言之,内置快捷键玩熟了,效率提高不是一点两点. VsCo ...