范围搜索是从拥有多个属性的报表集合中,寻找具有特定属性且位于指定范围内的元素,这类问题被称为范围搜索。
我们在这里要解决的是二维的范围搜索问题。
在二维平面上给出一堆点,然后给出n个矩形框。要求输出在矩形框内的所有点的id。
kDtree其实就类似于二叉搜索树(嗯其实差不多就是二叉搜索树)。
题目是 DSL_2_C
我们需要建立2DTree,那就需要对x轴和y轴分别进行排序。实现方式就是,深度为偶数的时候以x轴为基准,深度为奇数时,以y轴为基准。
其实这就是二维分割,可以看作是把对一块大的平面区域进行分割,分别按照x轴和y轴来切一刀,接着对于每个小区域都执行相同的分割。所有的点都在分割边上的时候,停止分割。分割其实就是建立了一个类似于二叉搜索树的东西。
上代码!
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
#define MAXN 500005
struct node
{
int parent, left, right;
int location; //对应point数组里面的元素的下标
};
class point
{
public: