赤果果的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. Flutter实战视频-移动电商-06.Dio基础_Get请求和动态组件协作

    博客地址: https://jspang.com/post/FlutterShop.html#toc-0ee 编写页面代码 创建动态组件HomePage,原来的代码是静态的我们这里就去掉就可以了. 然 ...

  2. java.endorsed.dirs

    java.ext.dirs 用于扩展jdk的系统库,那么 -Djava.endorsed.dirs 又有什么神奇的作用呢? java提供了endorsed技术: 关于endorsed:可以的简单理解为 ...

  3. 一个IP绑定多个域名的实现方法

    方案一: 文字叙述: 具体步骤如下:比如讲apache服务器127.0.0.1 配置成 www.sohu.com 首先在http.conf文件中 做如下处理: ①关闭默认的 #DocumentRoot ...

  4. UVaLive 3983 Robotruck (DP + 单调队列)

    题意:有n个垃圾,第i个垃圾坐标为(xi,yi),重量为wi,有一个机器人,要按照编号从小到大的顺序剑气所有的垃圾兵扔进垃圾桶,垃圾桶在原点, 每次总重量不能超过C,两点间距离为曼哈顿距离,求出最短的 ...

  5. npm 的安装与使用

    创建: 2019/04/06 完成: 2019/04/07  安装 npm写在node.js里, 故安装node.js即可 https://nodejs.org/en/download/ 确认是否安装 ...

  6. iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

    cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...

  7. iOS代码封装成.a文件(封装SDK)

    在众多开源的大神的博客里经整理如下:(已测试ok) 一.描述一下 Build ActiveArchitecture Only设置成YES: Architectures按Xcode默认配置,arm64向 ...

  8. Codeforces Round #375 (Div. 2)【A,B【模拟】,D【DFS】】

    PS_B:阿洗吧!B题卧槽数组开了250... PS_D:D题主要挂在了50*50口算得了250,数组开小,然后一开始还错了.= =哎,以后对于数据范围还是注意一点: 卧槽,这场可真二百五了... A ...

  9. 51nod1276(xjb)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前 ...

  10. SecureCRT 退格键等不好用

    1.MongoDB Shell中退格键使用的问题. 利用SecureCRT工具访问linux的时候,在使用MongoDB的交互式shell的时候,退格键(Backspace)无法使用,导致无法修改输入 ...