单调栈
文章平均质量分 80
# 单调栈
黑夜和白天
过去无可挽回,未来可以改变
展开
-
单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]
题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii,那么整个区域就切成了[1,i−1][1,i-1][1,i−1]和[i+1,n][i+1,n][i+1,n]的两段 现在我们就是要把[1,i−1][1,i-1][1,i−1]和[i+1,n][i+1,n][i+1,n]里面的线段合并就可以了 我们要把[1,i−1][1,i-1][1,i−1]里面的线段算原创 2021-09-02 12:27:08 · 80 阅读 · 0 评论 -
线段树 ---- 线段树维护线段相加+滑动变长窗口 2021牛客多校第7场 F xay loves trees
题目大意: 给你两个大小相同的树但是形状不一定一样 叫你选出最大的子集,满足下面两个条件 在第一颗树上是一条链 在第二颗树上任意两个点都不是祖先关系 解题思路: 首先我们现在第二颗树上面把每个点的dfs序处理处理,那么就变成在第一颗树上面找到最长的一条链,链上点的dfs序区间都不相交,祖先关系的点会存在下图关系 那么最开始我们想的是二分最大长度然后每次都去维护固定长度的链,每次区间修改(区间覆盖),O(1)O(1)O(1)查询,但是是O(nlog2n)O(nlog^2n)O(nlog2n)过不来原创 2021-08-07 19:50:29 · 149 阅读 · 0 评论 -
Codeforces 1300E. Water Balance[单调栈]
题目链接 题目大意:给你一个长度为n的数组,你可以选择一段区间将这段区间的数全都变成这段区间的平均值,问你最后这个数组字典序最小是怎么样的 解题思路:1.首先我们知道最后这个序列一定会变成一个单调上升的子序列 2.然后我们发现操作之后序列会变成一块一块的,每一块的数字都是相同的,那么我们可以按照分块的思想,如果这一块平均值比前面的小就合并到前面去 #include <iostream> #include <cstdio> #include <stack> #incl原创 2020-07-03 17:02:39 · 138 阅读 · 0 评论