BZOJ4364: [IOI2014]wall砖墙(线段树)】的更多相关文章

题意 题目链接 Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记. https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列,那么我们只维护最大最小值的覆盖标记即可. 也就是对于每一个节点,把本层的最大最小值下传之后清除即可. // luogu-judger-enable-o2 #include<bits/stdc++.h> #define LL long long using namespace std; const…
传送门 解题思路 线段树打标记,刚开始想复杂了,维护了四个标记.后来才知道只需要维护一个最大值最小值即可,然后更新的时候分类讨论一下. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int MAXN = 2000005; inline int rd(){ int x=0,f=1;char ch=getc…
线段树打标记的好(luo)题 打打标记,记得下移 = =听说2000000是用来卡线段树的 = =怎么办呢,,, = =打个读入优化看看能不能卡过去吧 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ; int n,m,i,opt,l,r,x; ],mx2[M*]; int read() { ,f=;char ch=getchar(); ;ch=getchar();}…
4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = buf; #define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2) ? EOF :*p1++) inline int read() { ,f=;; +ch-';return x*f; } ; ],mx[N<&…
好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用线段树维护 设置两个标记\(tag[0],tag[1]\),分别表示对应区间的最小值和最大值 初始值我们分别设成\(-inf\)和\(inf\) 之后我们分别维护就好了 如果是\(1\)操作我们要把区间的最小值更新,但是如果原来区间的最小值大于当前的值,那么就不更新 同时如果这个区间的最大值比需要更…
题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大于 hh的元素值 Remove L, R, hL,R,h:将序列 [L, R][L,R]内所有值大于 hh的元素都赋为 hh,此时不改变高度小于 hh的元素值 你需要输出进行 kk次上述操作之后的序列. 解析 显然每次操作会对一段区间的取值范围造成影响,那么不妨我们维护区间取值的上下界,就可以轻松A…
题目链接:UOJ - 25 题目分析 每个操作就是将被操作的数限制在一个区间,比如 Set_Max(5) 就是将被操作的数限定在了 [5, INF] 的区间里. 这些操作是可加的,但是必须按照顺序,不满足交换律. 对每个节点维护两个标记 Min_Tag[x], Max_Tag[x] ,表示这个节点的数被限制在了 [Max_Tag, Min_Tag] 的区间内. 最终的答案应该是 gmax(Max_Tag[x], gmin(MinTag[x], Val[x])).其中 Val[x] 是 x 这个位…
学习博客推荐——线段树+扫描线(有关扫描线的理解) 我觉得要注意的几点 1 我的模板线段树的叶子节点存的都是 x[L]~x[L+1] 2 如果没有必要这个lazy 标志是可以不下传的 也就省了一个push_down 3 注意push_up 写法有点不一样,不过是可以改成一样的. 简单裸题*2 L - Atlantis  HDU - 1542 #include <iostream> #include <cstdio> #include <algorithm> #inclu…
浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=4364 似乎可以不用吉司机线段树的作法--因为只需要维护区间最大最小值,也只有区间取最大最小值操作,所以可以直接用普通的线段树延迟标记解决这道问题.只要把最大值标记和最小值标记之间的关系处理得当即可. 时间复杂度:\(O((n+m)logn)\) 空间复杂度:\(O(n)…
题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(min\) 解题思路 首先要能看出来这是一道线段树的题. 那么我们要如何建立一个节点呢? 首先,对于每一个线段树上的节点,我们记两个标记 \(Min\) 和 \(Max\) . 因为题目涉及到 \(min\) 和 \(max\) 操作,所以应该不难想到设两个这样的标记. 这两个标记的意…