从杨哥哪里偷的板子, 存一下。

#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL _INF = 0xc0c0c0c0c0c0c0c0;
const LL mod = (int)1e9+;
const int N = 5e4 + ;
int n,k,idx;
struct Node{
int f[];
bool operator <(const Node&rhs)const{
return f[idx]<rhs.f[idx];
}
}a[N];
priority_queue<pair<double,Node> >q;
struct kdtree{
bool vis[N<<];
Node data[N<<];
void Build(int l, int r, int rt, int dep){
if(l > r)return ;
vis[rt] = ;
vis[rt<<] = vis[rt<<|] = ;
idx = dep%k;
int m = l+r >> ;
nth_element(a+l, a+m, a+r+);
data[rt] = a[m];
Build(l, m-, rt<<, dep+);
Build(m+, r, rt<<|, dep+);
}
void Query(Node p, int m, int rt, int dep){
if(!vis[rt]) return ;
pair<double,Node>cur(,data[rt]);
for(int i = ; i < k; ++i)
cur.fi += (cur.se.f[i] - p.f[i]) * (cur.se.f[i] - p.f[i]);
int dim = dep % k;
bool flag = ;
int x = rt << ,y = rt << | ;
if(p.f[dim] >= data[rt].f[dim]) swap(x,y);
if(vis[x]) Query(p, m, x, dep+);
if(q.size() < m) q.push(cur),flag = ;
else{
if(cur.fi<q.top().fi){
q.pop();
q.push(cur);
}
if((p.f[dim]-data[rt].f[dim])*(p.f[dim]-data[rt].f[dim])<q.top().fi)
flag=;
}
if(vis[y] && flag) Query(p,m,y,dep+);
}
}kd;
int main(){
while(scanf("%d%d",&n,&k)!=EOF){
for(int i = ;i < n; ++i)
for(int j = ; j < k; ++j)
scanf("%d", &a[i].f[j]);
kd.Build(,n-,,);
int t;
scanf("%d", &t);
while(t--){
Node p;
for(int i = ;i < k; ++i)
scanf("%d", &p.f[i]);
int m;
scanf("%d",&m);
while(!q.empty())
q.pop();
kd.Query(p,m,,);
printf("the closest %d points are:\n", m);
Node ans[];
for(int i = ; !q.empty(); ++i){
ans[i] = q.top().se;
q.pop();
}
for(int i = m - ; i >= ; --i)
for(int j = ; j < k; ++j)
printf("%d%c", ans[i].f[j], " \n"[j==k-]);
}
}
return ;
}

KDTree 板子的更多相关文章

  1. BZOJ2716 KD-Tree

    好久没写博客了 回去赶了好久文化课 颓欲见长 突然翻到fc爷的KD-Tree板子 来切了到裸题 对于一开始的数据我们可以先预处理 具体的排序方式见板子 其实就是我们对每次选定的一块选一个维度来排序啦 ...

  2. bzoj 3053: The Closest M Points【KD-tree】

    多维KDtree板子 左右儿子的估价用mn~mx当区间,假设区间里的数都存在:k维轮着做割点 #include<iostream> #include<cstdio> #incl ...

  3. bzoj 5355 kdtree 树链剖分

    https://www.lydsy.com/JudgeOnline/problem.php?id=5355 想在b站搜query on a tree系列不小心看到了这题 扑鼻而来的浓浓的OI风格的题面 ...

  4. KD-tree 专题「Hide and Seek · 巧克力王国」

    Lockey的瞎理解 抄了一遍板子又水了俩题,感觉对KD-tree 稍稍理解了一点儿,唠叨一下(二维的KD-tree),如有错误请指出(Lockey 洗脸恭听) 普通平衡树维护的是一维的序列,但对于二 ...

  5. 【bzoj1941】 Sdoi2010—Hide and Seek

    http://www.lydsy.com/JudgeOnline/problem.php?id=1941 (题目链接) 题意 给出n个二维平面上的点,求一点使到最远点的距离-最近点的距离最小. Sol ...

  6. 【bzoj2648】 SJY摆棋子

    http://www.lydsy.com/JudgeOnline/problem.php?id=2648 (题目链接) 题意 动态维护二维平面上的点的插入以及最邻近域搜索. Solution KDtr ...

  7. CH 4701 - 天使玩偶 - [CDQ分治]

    题目链接:传送门 关于CDQ分治(参考李煜东<算法竞赛进阶指南>): 对于一系列操作,其中的任何一个询问操作,其结果必然等价于:初始值 + 此前所有的修改操作产生的影响. 假设共有 $m$ ...

  8. CH4701 天使玩偶

    题意 4701 天使玩偶 0x40「数据结构进阶」例题 描述 题目PDF 样例输入 2 3 1 1 2 3 2 1 2 1 3 3 2 4 2 样例输出 1 2 来源 石家庄二中Violet 3杯省选 ...

  9. NOIP2018赛前停课集训记(10.24~11.08)

    前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...

随机推荐

  1. Mac环境下升级gcc版本--rocksdb

    前言 在mac环境下编译rocksdb,需要配置依赖的编译环境,其中有一项比较麻烦:c++编译要支持C++11,但是在mac环境安装xcode-select --install之后,已经安装有了gcc ...

  2. leetcode并发题目解题报告JAVA版

    一.Print in Order Suppose we have a class: public class Foo { public void first() { print("first ...

  3. gdb调试和编译后运行结果不一致

    今天在看代码时,遇到这么一段代码,我但是用g++编译了,运行发现有Segmentation fault. 然后就用gdb跟进去看看,可是gdb却正常执行了.不知道什么原因. #include < ...

  4. echarts3.x 入门

    echarts 使用 1.getStart 1.1引入 echart <!-- 引入 ECharts 文件 --> <script src="echarts.min.js& ...

  5. 分享我的GD32F450的IAP过程

    最近一个项目使用GD32F450VI+ESP8266需要做远程升级,基本参考正点原子IAP的那一章节,但是在GD32F450上却遇到了问题,无法跳转,然后使用正点原子的开发板stm32f429,以及s ...

  6. 2月9日 《Java 8实战》读后感

    第一部分 基础知识 第3章 Lambda表达式 使用函数式接口 Predicate Consumer Function 第二部分 函数式数据处理 第4章 引入流 第5章 使用流 第6章 用流收集数据 ...

  7. Python3 反射

    反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性 hasattr(obj,name) # hasattr(obj, name) # 判断一个对象是否有指定的属性name,返回Tr ...

  8. java web 加载Spring --web.xml 篇

    spring是目前最流行的框架.今天谈谈对spring的认识 起步 javaweb中我们首先会遇到的配置文件就是web.xml,这是javaweb为我们封装的逻辑,不在今天的研究中.略过,下面是一个标 ...

  9. 史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式

    1.概述 通过前两篇 史上最全面的SignalR系列教程-1.认识SignalR 史上最全面的SignalR系列教程-2.SignalR 实现推送功能-永久连接类实现方式 文章对SignalR的介绍, ...

  10. SpringBoot分布式:Dubbo+zookeeper

    西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...