题目大意:n个点,求第k远的点对的距离

KD树裸题

注意要用堆维护第k远

#include<bits/stdc++.h>
#define ll unsigned long long
#define maxn 100010
using namespace std;
inline int read(){
int s=;char ch=getchar();
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';ch=getchar())s=s*+ch-'';
return s;
}
int n,k,D,root;
struct node{
ll d[],mn[],mx[],ls,rs;
node(int x=,int y=){d[]=x;d[]=y;}
ll & operator [] (int x){return d[x];}
friend bool operator < (node a,node b){return a[D]<b[D];}
}a[maxn];
struct K{
ll d;
K(ll a=){d=a;}
};
priority_queue<K>Q;
bool operator < (K a,K b){return a.d>b.d;}
struct KD{
node t[maxn],T;
void up(int k){
node l=t[t[k].ls],r=t[t[k].rs];
for(int i=;i<;++i){
t[k].mn[i]=t[k].mx[i]=t[k][i];
if(t[k].ls)t[k].mn[i]=min(t[k].mn[i],l.mn[i]),t[k].mx[i]=max(t[k].mx[i],l.mx[i]);
if(t[k].rs)t[k].mn[i]=min(t[k].mn[i],r.mn[i]),t[k].mx[i]=max(t[k].mx[i],r.mx[i]);
}
}
int build(int l,int r,int now){
D=now;int mid=(l+r)>>;
nth_element(a+l,a+mid,a+r+);
t[mid]=a[mid];
if(l<mid)t[mid].ls=build(l,mid-,now^);
if(r>mid)t[mid].rs=build(mid+,r,now^);
up(mid);return mid;
}
ll dis(node a,node b){
return (a[]-b[])*(a[]-b[])+(a[]-b[])*(a[]-b[]);
}
ll get(int k){
if(!k)return ;
ll L=;
L=max(L,dis(T,node(t[k].mn[],t[k].mn[])));
L=max(L,dis(T,node(t[k].mn[],t[k].mx[])));
L=max(L,dis(T,node(t[k].mx[],t[k].mn[])));
L=max(L,dis(T,node(t[k].mx[],t[k].mx[])));
return L;
}
void ask(int k){
if(!k)return;
ll dl=get(t[k].ls),dr=get(t[k].rs);
ll L=dis(T,t[k]);
if(L>Q.top().d){Q.pop();Q.push(K(L));}
if(dl>dr){
if(dl>Q.top().d)ask(t[k].ls);
if(dr>Q.top().d)ask(t[k].rs);
}else{
if(dr>Q.top().d)ask(t[k].rs);
if(dl>Q.top().d)ask(t[k].ls);
}
}
void work(){
for(int i=;i<=n;++i){
T=a[i];
ask(root);
}
}
}kd;
int main(){
n=read();k=read();k<<=;
for(int i=;i<=n;++i)
a[i][]=read(),a[i][]=read();
root=kd.build(,n,);
for(int i=;i<=k;++i)Q.push(K());
kd.work();
cout<<Q.top().d<<endl;
return ;
}

CQOI 2016 k远点对的更多相关文章

  1. BZOJ4520 [Cqoi2016]K远点对

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  2. 【BZOJ-4520】K远点对 KD-Tree + 堆

    4520: [Cqoi2016]K远点对 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 490  Solved: 237[Submit][Status ...

  3. BZOJ 4520: [Cqoi2016]K远点对

    4520: [Cqoi2016]K远点对 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 638  Solved: 340[Submit][Status ...

  4. 【bzoj4520】 Cqoi2016—K远点对

    http://www.lydsy.com/JudgeOnline/problem.php?id=4520 (题目链接) 题意 求平面内第K远点对的距离. Solution 左转题解:jump 细节 刚 ...

  5. BZOJ 4520 [Cqoi2016]K远点对(KD树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4520 [题目大意] 求K远点对距离 [题解] 修改估价函数为欧式上界估价,对每个点进行 ...

  6. BZOJ 4520: [Cqoi2016]K远点对(k-d tree)

    Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1162  Solved: 618[Submit][Status][Discuss] Descripti ...

  7. 【bzoj4520】K远点对

    Portal --> bzoj4520 Description 给你平面内\(n\)个点的坐标,求欧氏距离下第\(k\)远的点对 Solution 因为kd其实..严格来说挺不熟的用的太少了qw ...

  8. 【BZOJ4520】K远点对(KD-Tree)

    [BZOJ4520]K远点对(KD-Tree) 题面 BZOJ 洛谷 题解 考虑暴力. 维护一个大小为\(K\)的小根堆,然后每次把两个点之间的距离插进去,然后弹出堆顶 这样子可以用\(KD-Tree ...

  9. BZOJ - 4520 K远点对

    题意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对 维护大小为2k最小堆,KD树的估值用前面提到的做法 PS.网上有人估价是使用边界四个点的最值来独立枚举,然而这样写似乎过不了 #incl ...

随机推荐

  1. 书柜的尺寸(bzoj 1933)

    Description Tom不喜欢那种一字长龙式的大书架,他只想要一个小书柜来存放他的系列工具书.Tom打算把书柜放在桌子的后面,这样需要查书的时候就可以不用起身离开了.显然,这种书柜不能太大,To ...

  2. OutofMemory之PermGen介绍

    可参考:https://my.oschina.net/benhaile/blog/214159.

  3. mysql安装

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增.截取.更新.删除等操作. ...

  4. [笔记]linux下环境变量配置字段

    一般修改/etc/profile文件 java: export JAVA_HOME=/usr/lib/java/jdk1.8.0_92export CLASSPATH=.:$JAVA_HOME/lib ...

  5. Codeigniter的Redis使用

    1. ./config/redis.php: <?php $config['redis_host'] = '127.0.0.1'; $config['redis_port'] = '6379'; ...

  6. HTML5 五子棋 - JS/Canvas 游戏

    背景介绍 因为之前用c#的winform中的gdi+,java图形包做过五子棋,所以做这个逻辑思路也就驾轻就熟,然而最近想温故html5的canvas绘图功能(公司一般不用这些),所以做了个五子棋,当 ...

  7. 微信小程序资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有,转载请联系作者获得授权. 1:下载开发者工具 ...

  8. openmp 的使用

    http://blog.csdn.net/gengshenghong/article/details/7003110 说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解. ( ...

  9. SGIP、SMGP 长短信发送问题小结

    长短信发送问题.1.将信息长度拆开发送.2.为了解决长短信拆分发送,在手机终端,收到的顺序错乱,所以在每一段短信发送完成后,延时5秒,这样在手机终端客户收到的信息,就会按照拆分的顺序发送. //信息总 ...

  10. 【CentOS】LAMP

    文章需要整合,学习需要归纳,博主把一连四篇的LAMP合并成为一片长篇的大部头,并梳理了一下他们的关系,希望对各位有所帮助 最近一次更新:2016年12月21日21:38:31 本文为博主JerryCh ...