范围搜索(kDTree)

范围搜索是从拥有多个属性的报表集合中,寻找具有特定属性且位于指定范围内的元素,这类问题被称为范围搜索。

我们在这里要解决的是二维的范围搜索问题。

在二维平面上给出一堆点,然后给出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:
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值