???+note " 例题[luogu P1429 平面最近点对(加强版)](https://www.luogu.org/problem/P1429)"
给定平面上的 $n$ 个点,找出平面上最近两个点对之间的 [欧几里得距离](/geometry/distance/#_1) 。
-
+
$2\le n\le 200000$ , $0\le x,y\le 10^9$
-
-首先建出关于这 $n$ 个点的 2-D Tree 。
+
+首先建出关于这 $n$ 个点的 2-D Tree。
枚举每个结点,对于每个结点找到不等于该结点且距离最小的点,即可求出答案。每次暴力遍历 2-D Tree 上的每个结点的时间复杂度是 $O(n)$ 的,需要剪枝。我们可以维护一个子树中的所有结点在每一维上的坐标的最小值和最大值。假设当前已经找到的最近点对的距离是 $ans$ ,如果查询点到子树内所有点都包含在内的长方形的 **最近** 距离大于等于 $ans$ ,则在这个子树内一定没有答案,搜索时不进入这个子树。
此外,还可以使用一种启发式搜索的方法,即若一个结点的两个子树都有可能包含答案,先在与查询点距离最近的一个子树中搜索答案。可以认为, **查询点到子树对应的长方形的最近距离就是此题的估价函数** 。
-**注意:虽然以上使用的种种优化,但是使用 k-D Tree 单次查询最近点的时间复杂度最坏还是 $O(n)$ 的,但不失为一种优秀的骗分算法,使用时请注意。在这里对邻域查询的讲解仅限于加强对 k-D Tree 结构的认识。**
+ **注意:虽然以上使用的种种优化,但是使用 k-D Tree 单次查询最近点的时间复杂度最坏还是 $O(n)$ 的,但不失为一种优秀的骗分算法,使用时请注意。在这里对邻域查询的讲解仅限于加强对 k-D Tree 结构的认识。**
??? "参考代码"