[ds 记录]abc263ex Intersection2
题意:给定 \(n\) 条线,求两两交点与原点距离的第 \(k\) 远值。
直接做很难,转为二分答案。现在,需要解决:给定 \(n\) 条直线,这些线在圆心原点半径为 \(k\) 的圆中有几个交点。
将直线转化为圆的弦,再将弦的端点用圆心角表示以加以离散化,问题变成了:给定若干个区间 \([l_i, r_i]\),有几对区间 \([l_i,r_i]\) 与 \([l_j,r_j]\) 满足 \([l_i,r_i] \cap [l_j, r_j] \neq \varnothing\)。
考虑将区间端点做排序,用线段树维护,一个个扫过去,如果是左端点,就在线段树上查询该区间内的其它的右端点数,如果是右端点,就在线段树上更新。这样能做到 \(O(n \log n)\)。
将问题转为判定是一步重要的转化,此后转为区间问题是对问题本质的精准提取。感觉这题并没有一般的 abc ex 那么难,或者说,难点在于计算几何的计算,但是因为位置原因,赛时一直没敢开。
代码留坑罢,等学点计算几何再说。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16575656.html