(休闲娱乐)如果忘了 KD-Tree 怎么写
WorldMachine
·
·
休闲·娱乐
给出 n 个二维平面上的整点,m 次操作,包括矩形修改、矩形查询。
下面 n,m 同阶。
做法一
KD-Tree。我忘了。
做法二
考虑按 x 坐标排序后分块,设块长为 B。
块内再按 y 排序,开一个线段树或者别的什么数据结构。
修改的话,整块直接在对应块的线段树上改,散块暴力重构线段树即可,复杂度为 \mathcal O\left(\dfrac nB\log n+B\right)。
查询同理,复杂度一样。取 B=\mathcal O(\sqrt{n\log n}) 有最优复杂度 \mathcal O(n\sqrt{n\log n})。
这也太抽象了。
做法三
先赌一波出题人不会造数据,这个做法是基于随机数据的。
先把坐标离散化,这样每个点的坐标范围都在 [1,n] 之间。
将平面按照 B 为块长分块,这样每个块里面期望只有 \mathcal O\left(\dfrac{B^2}{n}\right) 个点。
然后整块一共有 \mathcal O\left(\dfrac nB\right) 列,就用数据结构修改,散块暴力扫即可,复杂度是 \mathcal O(n\sqrt n\log n) 或者 \mathcal O(n^{5/3}) 的,\log 好像可以放里面?不管了。
这也太抽象了。
这个东西好像可以做一些随机数据并且没有修改的东西,比如说 \mathcal O(n\sqrt n) 半平面 rank,\mathcal O(n\sqrt{n\log n}) 半平面 kth,但空间好像也是对应的?
不知道能不能做袜子那个题,感觉有点难。
做法四
还是老老实实打暴力吧。