CQOI 2016 k远点对
题目大意: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远点对的更多相关文章
- BZOJ4520 [Cqoi2016]K远点对
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 【BZOJ-4520】K远点对 KD-Tree + 堆
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 490 Solved: 237[Submit][Status ...
- BZOJ 4520: [Cqoi2016]K远点对
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 638 Solved: 340[Submit][Status ...
- 【bzoj4520】 Cqoi2016—K远点对
http://www.lydsy.com/JudgeOnline/problem.php?id=4520 (题目链接) 题意 求平面内第K远点对的距离. Solution 左转题解:jump 细节 刚 ...
- BZOJ 4520 [Cqoi2016]K远点对(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4520 [题目大意] 求K远点对距离 [题解] 修改估价函数为欧式上界估价,对每个点进行 ...
- BZOJ 4520: [Cqoi2016]K远点对(k-d tree)
Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1162 Solved: 618[Submit][Status][Discuss] Descripti ...
- 【bzoj4520】K远点对
Portal --> bzoj4520 Description 给你平面内\(n\)个点的坐标,求欧氏距离下第\(k\)远的点对 Solution 因为kd其实..严格来说挺不熟的用的太少了qw ...
- 【BZOJ4520】K远点对(KD-Tree)
[BZOJ4520]K远点对(KD-Tree) 题面 BZOJ 洛谷 题解 考虑暴力. 维护一个大小为\(K\)的小根堆,然后每次把两个点之间的距离插进去,然后弹出堆顶 这样子可以用\(KD-Tree ...
- BZOJ - 4520 K远点对
题意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对 维护大小为2k最小堆,KD树的估值用前面提到的做法 PS.网上有人估价是使用边界四个点的最值来独立枚举,然而这样写似乎过不了 #incl ...
随机推荐
- JS基础学习(一)
首先感谢 http://www.w3school.com.cn/js/index.asp 学js真的很方便,&下面的内容其实是我自己做的一个备忘 第一节 大致了解 一 js基本介绍 1.轻量级 ...
- 在eclipse安装svn插件
1.在“帮助--安装新软件”中选中.我这个是中文版的,英文版的是“install new software”
- android的消息处理机制——Looper,Handler,Message
在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- 关于P,V操作理解的突破,关于并发设计与并行
今天又找了一篇博客研究P,V操作.. 发现..它有一个变量没有声明.. 我就换了篇博客..http://c.biancheng.net/cpp/html/2600.html 然后就看懂了.. 关键突破 ...
- Swift -运算符和循环结构
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...
- 【Java 新建项目】使用程序对新项目的各个实体 创建Dao、DaoImpl、Service、ServiceImpl层的文件
首先给出基本Dao层代码: GenericDao.java package com.agen.dao; import java.io.Serializable; import java.util.Co ...
- trigger() --工作中问题nav样式
自动执行某元素的某个事件 $("#div").trigger("click"); //让系统自动执行单击事件 适用于nav样式中,下面横线绝对定位于nav.o ...
- JAVA基础研究
package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...
- HttpClient发送Get和Post请求
package JanGin.httpClient.demo; import java.io.IOException; import java.io.UnsupportedEncodingExcept ...