KDtree是一种很好用的数据结构,在维护多维信息的时候有奇效。
当维护 \(k\) 维信息的时候单次时间复杂度是 \(n^{\frac{k-1}{k}}\),一维另作讨论.
这里拿二维来举例子
把二维平面竖着切一刀,选择按 \(x\) 坐标排序中位数的点来切。
剩下的就被分成了两部分,递归下去的时候按这一部分的 \(y\) 排序来切,再向下递归的时候按这一部分的 \(x\) 排序来切...
维护区间信息的话有点类似于平衡树。
多刷刷题就好了。
某枫举过一个例子:
当维护的信息多一维的时候,写树套树的话码量,常数,调试难度会上升一个数量级。
但是KDtree只用增加变量,修改一下排序方式。
哪个更方便显而易见.