线段树 还是这个图 , 因为线段树的一个节点表示的是一个区间范围 , 而底的计算就是计算 p1 p2 p3 的组合 , 相当于是区间和 我们把 p1 p2 p3 看作叶子节点 , 当扫描线扫到一条入边时 , 则向区间加这条线段 ;当扫描线扫到一条出边时 ,则向区间减这条线段 复杂度 O(mlogn) 看不懂没关系 , 来看...
扫描线: 使用一条垂直于 xx 轴的直线,从左到右扫描这个图形,例如这样: 只有碰到矩形的左边界或者是右边界时这个线段所扫描到的情况才会改变。 因此,我们可以把所有矩形的入边和出边按 xx 值排序,根据 xx 值从小到大去处理。 用线段树维护扫描到的情况。 如上图: 如果碰到矩形的入边,就把这条边加入。如果碰...
显然,我们维护这个扫描线需要支持区间修改,可以用线段树进行维护。 而用线段树思想,也就是说我们要把扫描线分成若干个小区间,那么我们可以大概地画出它的样子: 考虑线段树每个节点要维护 左右端点、覆盖长度 的信息。 如果线段树中的叶节点中有区间被扫描线上被覆盖的区间覆盖,那么该区间就要计算在内,并向上传递到根...
所以,扫描线也就成了线段树很大的应用。 给出模板:第一篇博客(饶齐大佬)的修正与改进,还有一些地方的解释,错误原因 第一个: 我们在线段树更新的时候,是这样往下走的: sumv[O]=sumv[O*2]+sumv[O*2+1]. 如果左子树维护的区间[l,mid], 右子树维护的区间[mid+1,r] 那么还有一个区间[mid,mid+1]没...
扫描线的应用基础如下:给出二维直角坐标系上若干个矩形的对角坐标,求出矩形相互覆盖后的面积 一般来说,求解时默认矩阵均在第一象限,如果不是,可以直接将坐标偏移后取离散化,当然也可以直接离散化,只是是否增加绝对值的问题,具体思路不多讲,可以参考后面的文献,只简单说一下思想: ...
线段树-扫描线 图片来源 扫描线: 使用一条垂直于\(x\)轴的直线,从左到右扫描这个图形,例如这样: 只有碰到矩形的左边界或者是右边界时这个线段所扫描到的情况才会改变。 因此,我们可以把所有矩形的入边和出边按\(x\)值排序,根据\(x\)值从小到大去处理。
扫描线如下图所示,只要求出每一条扫描线的有效长度,就可以得出该区域的实际面积,最后把所有面积相加,即为该多边形的总面积。 扫描线 所以对于每一个矩形,只需要把矩形转换成上下两条平行线段即可(上边和下边)。 由此我们开一个结构体,记录每一条线段structnode{doublel,r,h;//左端点,右端点,y轴(高度)intd...
1 线段树区间更新&扫描线 2 线段树进阶 •更新区间 –为了严格O(logN),我们需要做什么?•遇到完整的区间就立即返回 –孩子怎么办?•在父亲结点记录孩子的信息 –更有效的线段树写法 •push_down和push_up操作 3 延迟标记的思想 •延迟标记的思想•我们的本意是希望把这种标记(如各种要维护的信息,在...
把P1、P2、P3看成线段树的叶子结点,从最下面的第一条线开始往上扫描。一根扫描线,就是线段树的一个结点,结点的值是区间和,就是这条扫描线对应的新矩形的宽度。概况地说,“如果扫到的边是某矩形的入边,则往区间插入这条线段;如果扫到的边是某矩形的出边,则往区间删除这条线段”。
七:扫描线 八:可持久化 (主席树) 九:练习题 一:综述 假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点。 线段树的用处就是,对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是O(log2(n)). 线段树的原理,就是,将[1,n]分解成若干特定的子区间(数量不超过...