赤果果的kdTree。

学习传送门:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html

其实就是二叉树的变形

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e4+,K = ; #define squ(x) ((x)*(x)) int k,n,idx; struct Point
{
int x[K];
bool operator <(const Point& rhs) const{
return x[idx] < rhs.x[idx];
}
void print() const {
for(int i = ; i < k-; i++)
printf("%d ",x[i]);
printf("%d\n",x[k-]);
}
}P[maxn]; #define fi first
#define se second
typedef pair<double,Point> HeapNode;
priority_queue<HeapNode> q; struct kdTree
{
Point Node[maxn<<];
int son[maxn<<];
#define lch (rt<<1)
#define rch (rt<<1|1) void build(int l,int r,int rt = ,int dep = )
{
if(l>r) return;
son[rt] = r-l;
int x = lch,y = rch;
son[x] = son[y] = -;
idx = dep%k;
int mid = (l+r)>>;
nth_element(P+l,P+mid,P+r+);
Node[rt] = P[mid];
build(l,mid-,x,dep+);
build(mid+,r,y,dep+);
} Point qp; int qm;
void query(int rt = ,int dep = )
{
if(!~son[rt]) return;
HeapNode u(,Node[rt]);
for(int i = ; i < k; i++)
u.fi += squ(u.se.x[i]-qp.x[i]); int dim = dep%k, x = lch, y = rch;
bool flag = false;
if(qp.x[dim]>=Node[rt].x[dim]) swap(x,y);
if(~son[x]) query(x,dep+);
if(q.size()<qm) q.push(u),flag = true;
else {
if(u.fi<q.top().fi) q.pop(),q.push(u);
if(squ(qp.x[dim]-Node[rt].x[dim])<q.top().fi) flag = true;
}
if(flag&&~son[y]) query(y,dep+);
}
}kd; const int M = ;
Point ans[M]; int main()
{
// freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&k)){
for(int i = ; i < n; i++)
for(int j = ; j < k; j++)
scanf("%d",&P[i].x[j]);
kd.build(,n-);
int t; scanf("%d",&t);
while(t--){
for(int i = ; i < k; i++) scanf("%d",&kd.qp.x[i]);
scanf("%d",&kd.qm);
kd.query();
printf("the closest %d points are:\n",kd.qm);
int top = ;
while(q.size()){
ans[++top] = q.top().se;
q.pop();
}
while(top){
ans[top].print();
top--;
}
}
}
return ;
}

HDU 4347 The Closest M Points (kdTree)的更多相关文章

  1. hdu 4347 The Closest M Points(KD树)

    Problem - 4347 一道KNN的题.直接用kd树加上一个暴力更新就撸过去了.写的时候有一个错误就是搜索一边子树的时候返回有当前层数会被改变了,然后就直接判断搜索另一边子树,搞到wa了半天. ...

  2. 【BZOJ】3053: The Closest M Points(kdtree)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3053 本来是1a的QAQ.... 没看到有多组数据啊.....斯巴达!!!!!!!!!!!!!!!! ...

  3. bzoj 3053 HDU 4347 : The Closest M Points kd树

    bzoj 3053 HDU 4347 : The Closest M Points  kd树 题目大意:求k维空间内某点的前k近的点. 就是一般的kd树,根据实测发现,kd树的两种建树方式,即按照方差 ...

  4. HDU 4347 - The Closest M Points - [KDTree模板题]

    本文参考: https://www.cnblogs.com/GerynOhenz/p/8727415.html kuangbin的ACM模板(新) 题目链接:http://acm.hdu.edu.cn ...

  5. 数据结构(KD树):HDU 4347 The Closest M Points

    The Closest M Points Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Ot ...

  6. hdu 4347 The Closest M Points (kd树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4347 题意: 求k维空间中离所给点最近的m个点,并按顺序输出  . 解法: kd树模板题 . 不懂kd树的可以先看看这个 . 不多说, ...

  7. HDU 1024 Max Sum Plus Plus (动态规划)

    HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...

  8. 【BZOJ3489】A simple rmq problem(KD-Tree)

    [BZOJ3489]A simple rmq problem(KD-Tree) 题面 BZOJ 题解 直接做肯定不好做,首先我们知道我们是一个二维平面数点,但是限制区间只能出现一次很不好办,那么我们给 ...

  9. 【BZOJ1941】Hide and Seek(KD-Tree)

    [BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...

随机推荐

  1. 3.19 YARN HA架构及(RM/NM) Restart讲解

    一.ResourceManager HA ResourceManager(RM)负责跟踪集群中的资源,以及调度应用程序(例如,MapReduce作业). 在Hadoop 2.4之前,ResourceM ...

  2. mysql分页性能

    - select * from userinfo limit 20000,10  # 数据越往后越慢 - 索引表中扫: select * from userinfo where id in (sele ...

  3. 洛谷 - P1582 - 倒水 - 位运算

    https://www.luogu.org/problemnew/show/P1582 要求用最少的瓶子,那肯定不能有两个一样的瓶子,否则合并更优. 枚举其二进制位,每次加上lowbit,将最后一个1 ...

  4. 767. Reorganize String

    Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...

  5. ajax 的三种使用方法

    第一种 也是最古老的一种方法之一 from 表单直接提交数据到php文件里 action为路径 <form method="post" action="./inde ...

  6. HTTP1.1规范下载由6个文档组成

  7. D - Fliptile

    #include <stdio.h> #include <iostream> #include <math.h> #include <algorithm> ...

  8. 解决:npm中 下载速度慢 和(无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次)。

    1.解决下载速度 因为我们npm下载默认是,连接国外的服务器,所以网速不是特别好的时候,可能下不了包 安装nrm 使用 npm i nrm -g 我们的一般工具包都是下载到全局 安装完毕之后,可以运行 ...

  9. 我的NopCommerce之旅(2): 系统环境及技术分析

    一.系统环境 IIS7.0 or above ASP.NET 4.5(MVC 5.0) .NET Framework 4.5.1 or above VS 2012 or above 二.架构设计 Pl ...

  10. P1816 忠诚 倍增

    链接:https://www.luogu.org/problem/show?pid=1816 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k ...