![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 86
Just__Do__IT__
you and me ,day day up togeter
展开
-
Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma(线段树)
题目链接题目大意:给你一个长度为nnn 的数组 aaa每次有两种操作1 x y:ax=y1 \ x \ y: a_x = y1 x y:ax=y2 l r:询问区间[l,r]内有多少对(p,q),l≤p≤q≤r 满足子序列ap≤ap+1≤⋯≤aq2 \ l \ r:询问区间 [ l , r ] 内有多少对 (p, q), l \leq p \leq q \leq r \ 满足子序列 a_p \leq a_{p+1原创 2021-09-07 00:38:15 · 132 阅读 · 0 评论 -
【hdu】1828 Picture —— 扫描线求周长
原题链接目录题目:解题思路:代码:碎碎念:题目:解题思路:题目大意:给你n个边平行与坐标轴的矩形,矩形可能有重叠部分,问你所有矩形构成的图形的轮廓线多长(即外周长+内部中空的周长)错误想法:做了之前的求矩形面积和的问题,那么自然会想到每一根扫描线都用线段树维护了有效的长度,那么每一次都加上那个长度,先从左往右跑一边,再从上往下跑一遍,答案不就出来了?这真的对吗?答案是:错误的!题目只要求出轮廓线长度,如果那样算,结果比答案大很多,因为算了很多不必要的长度。正确做法:先考虑横边:观察下图中原创 2021-08-10 21:12:58 · 311 阅读 · 0 评论 -
【ACWing】248. 窗内的星星——扫描线
原题链接目录题目:解题思路:代码碎碎念题目:解题思路:设某颗星星的坐标为 (x,y)(x,y)(x,y) ,那么当窗户的右上角端点的坐标在 (x∼x+w−1,y∼y+h−1)(x\sim x+w-1 , y\sim y+h-1)(x∼x+w−1,y∼y+h−1) 这个范围内时,星星就会出现在窗户里。(因为题目中说边界的星星不算,所以长和宽都要减1)于是我们可以将每个星星都扩展成一个矩形,通过画图我们可以发现:若两个矩形之间有重叠部分,那么他们便可以放在同一个窗户中,那么这个窗户的亮度就是这两原创 2021-08-10 14:06:30 · 211 阅读 · 0 评论 -
【hdu】1255 覆盖的面积——扫描线求重叠面积和
原题链接目录题目:解题思路:代码:碎碎念:题目:解题思路:这题的思路和 【ACWing】247. 亚特兰蒂斯 的差不多,只不过线段树中需要多存储一个变量val2,记录区间内被覆盖2次及以上的线段的长度,在维护的时候,需要根据 cover 的值,分类讨论。当 cover=0 的时候,代表该区间没有被全部覆盖过,那么该区间的 val1,val2 的长度分别是各自左子区间和右子区间长度之和;当 cover>=2 的时候,代表该区间至少被完全覆盖了两次,那么 val1,val2 的长度都等于原创 2021-08-10 14:03:59 · 173 阅读 · 0 评论 -
【ACWing】245. 你能回答这些问题吗(线段树)
原题链接目录题目:输入输出样例:解题思路:代码:碎碎念:题目:输入输出样例:解题思路:单点修改和区间查询问题,而且数据是 5e55e^55e5 的,很自然想到了用线段树来维护。区间最大连续子段和=max(左子树的最大连续子段和,右子树的最大连续子段和)区间最大连续子段和=max(左子树的最大连续子段和,右子树的最大连续子段和)区间最大连续子段和=max(左子树的最大连续子段和,右子树的最大连续子段和)???这样想的话,那么遗漏了一种情况:左端点在左子树,右端点在右子树。所以,最终父节点的答案原创 2021-08-05 11:05:50 · 136 阅读 · 0 评论 -
Bin Packing Problem (线段树+multiset)
原题链接目录题目:输入输出样例:题目大意:解题思路:代码:碎碎念:题目:输入输出样例:题目大意:装箱问题。给你含有nnn个数字的一个数组,每个数字代表物品的重量,给你每个箱子的最大容量ccc。有两种装箱子的策略:1:首次适应算法:每次从前往后遍历每个已经开的箱子,如果可以放得下,那就放进去;如果都放不下,那就新开一个箱子。2:最佳适应算法:找到所有已经打开的箱子中可以放下这个物品的箱子中剩余容量最小的那个箱子。如果都放不下,那就新开一个箱子。求:分别运用两种算法,按顺序将所有物品装箱,至原创 2021-08-04 17:28:27 · 353 阅读 · 0 评论 -
【ACWing】247. 亚特兰蒂斯——扫描线求面积
原题链接目录题目:解题思路:代码:题目:解题思路:多个矩形的面积之和,那应该要去除掉重叠部分,我怎么知道哪些重合了呢?那就看最终所有矩形堆一起的状态,转化成了一个多边形的面积。根据初中的几何知识可以知道,要求一个多边形的面积,可以采取切割的办法。切割时,每一条分界线就可以看作是一条从左往右的扫描线。来模拟一下我们记录每一条竖直方向上的线段(一个含x坐标,下端y坐标y1,上端y坐标y2,加减的标记k的四元组(x,y1,y2,k))然后按照x坐标进行排序,从左往右扫描一遍。每一段矩形的宽原创 2021-08-10 13:18:37 · 327 阅读 · 0 评论