P4169 [Violet]天使玩偶/SJY摆棋子
首先这题显然可以 CDQ,分四个方向分别跑就行了,拆出来的条件是一个三维偏序问题。
但是 3×105 的数据范围导致 CDQ 很容易被卡常啊。。(实际上也确实有很多被卡了)。
所以考虑可以用玄学 K-DTree 来维护。
具体来说,考虑从根开始向下行走,每走一个点就更新一下答案。每次查一下这个点到两边矩形的最小距离是否超过了当前的答案,如果是就不走了。
一个优化是,每次先进入距离最小的子树。
这样最坏是 O(n2) 的,但是随机数据跑得跟 O(nlogn) 一样快。
cpp
1 |
|