扫描线
“你长大后想成为什么样的人?”
“善良的人。” 男孩说。
重点
把一个矩阵分成横竖两种边界,线性扫描一种边界,另一种边界转换成区间和或差等信息,用前缀和或者线段树维护区间信息。
矩形面积并
题目: https://onlinejudge.u-aizu.ac.jp/courses/library/3/DSL/4/DSL_4_A
思路:扫描线从左往右扫描,遇到左边界时,对应的区间 +1
,遇到右边界时,对应的区间 -1
。用线段树维护区间加减情况,并统计在该区间里非 0
的位置个数。线段树,用 sum
维护非 0
位置的个数,tag
维护该区间的和。
注意点:因为要维护的区间是从 -1e9
到 1e9
,区间比较大需要动态开点。因为这道题有一个比较特殊的性质,就是每一个左边界一定有一个对应的右边界,所以只要区间的 tag
不为 0
(即大于 0
),那 sum
就是区间长度,否则就是左右儿子的和。每次答案的增量就是,整个区间的 sum
即 c[1].sum
乘上横轴移动的距离。
细节:需要把线段树维护的整个区间右移到 1
到 2e9+1
,不然计算 mid
的时候可能会出现问题,同时在计算 mid
的时候需要用 unsigned
1 |
|
数矩形内有多少个点
- Post title:扫描线
- Post author:Eva.Q
- Create time:2022-08-19 22:38:14
- Post link:https://qyy/2022/08/19/Algorithm/scan-line/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.