题意是说有T组样例输入,然后输入N和M,N是旅馆的个数,M是游客的个数。假设旅馆中来多少人都能住开,接下来N行分别是旅馆的位置x,y和旅馆的价格c,然后M行分别是这些人现在的位置和他们所带的钱。要求输出离每个人最近且这个人能付起这个旅馆房费的旅馆(只要付得起就行,不用考虑价格高低)。如果有很多旅馆同时满足要求,就输出样例中先输入进去的那一个旅馆。
这个题几乎是KD树的一个模板题,只是多加了价格的限制以及最后处理一下旅馆顺序进行输出。抛开这些就是一个求最近距离的KD树问题。也是之前从来没见过这个算法,看了一下,其实和线段树也差不多,只是在处理上这是一个多维的二叉搜索树,进行多维查询,具体的就不多说了,因为对于KD树我自己其实也没太深入看懂= =临近区域赛,从网上找了份题解先看懂了,记录一下为比赛准备模板~
下面AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
using namespace std;
long long n,m;
long long cmp_d;
long long root;
struct node
{
long long l,r;
long long d[3],Max[3],Min[3];
long long id;
};
node a[200005];
bool cmp(node a,node b)
{
return a.d[cmp_d]<b.d[cmp_d];
}
int up(long long p,long long k)
{
int i;
for(