二维平面上给出若干屋檐(线段),问各个屋檐流过的水量。看样例就会明白啦,单位横坐标长度降雨量是 $1$ ,雨会从高的一端流向低的一端被其他屋檐或地面接住。
所以离散化扫描线暴力搞一搞就好(因为一点上空最多 $25$ 个屋檐)。扫描过程处理屋檐间的关系(给接水屋檐向流水屋檐连边)和计入每一段最高屋檐接到的水。最后在DAG上dfs一下算好答案就可以了。
经典扫描线,求多个矩形并的周长。在左端把 $[y_1,y_2]$ 加入线段树,右端删除。维护区间的段数和有效长度。横方向上要被计入答案的是当前扫描到的线与线之间距离×2×(线段树中的)段数,竖方向是加入每个操作前后线段树里有效长度之差的绝对值。注意细节问题比如同一条线上的操作要先增后删啦之类。
给若干建筑求面积并(其实还是矩形面积并)。
给二维平面上若干黑白点,要用一条直线划分,问一侧黑点加另一侧白点加线上点数目和的最大值。
明显选其中两点连线是可以取到最大值的。枚举固定一点,极角排序,扫过去的同时维护一个半平面的区间即可。(实现技巧:把某个颜色的点变换为关于定点对称的点可以只数一侧点数便于统计;排序时用`atan2`判断是否在 $180°$ 内用叉积避免精度问题)
二维平面上给出若干个点,规定每点到某条原点出发的射线的距离不超过 $d$ ,问最少多少条射线。
每个点都可以确定一个射线角度的区间,转化成区间覆盖问题(每个区间中至少要选一个点),贪心,因为是环形的,枚举每一个区间作为起始。(拓展阅读:[三类贪心区间覆盖问题 BY Ra煞](https://www.cnblogs.com/I-Love-You-520/p/11147003.html “三类贪心区间覆盖问题 BY Ra煞”))
啊啊啊啊迷惑 $31$ 行到 $39$ 行这个部分我一开始用的`atan2`就不行。看别人的代码比对之后锁定问题就这段改成`asin`才能过。。