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 ...
随机推荐
- Java学习笔记__异常机制_try_catch_finally_return执行顺序
package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...
- ionic + cordova+angularJs 搭建的H5 App完整版总结
为期半个月的项目实践开发,已完整告一段落,团队小组获得第一名,辛苦总算没有白费,想起有一天晚上,整个小组的人,联调到12点才从公司回去,真是心酸.这里总结一下,项目过程中遇到的问题 和感悟.哈哈, ...
- HTTrack 网站备份工具
HTTrack可以克隆指定网站-把整个网站下载到本地.可以用在离线浏览上,免费的噢! 强大的Httrack类似于搜索引擎的爬虫,也可以用来收集信息.记得之前写过篇http://www.cnblogs. ...
- linux环境中使用转义字符使命令行字符颜色高亮
而通过转义序列设置终端显示属性的格式为: \033[Param {;Param;...}m 其中转义序列以 \033[ 为开头,m 为设置属性结束,中间部分的 Param 为属性值,{} 表示可以设置 ...
- oracle 11.2.0.4单实例文件系统安装与补丁
[TOC] 一,预安装处理 1.版本准备 操作系统:RHEL 6.5 数据库版本:Oracle 11.2.0.4 相关包:p13390677_112040_Linux-x86-64_1of7.zip ...
- 【leetcode】Compare Version Numbers
题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...
- Qt中 QString 和int, char等的“相互”转换
转载:http://blog.csdn.net/ei__nino/article/details/7297791 Qt中 int ,float ,double转换为QString 有两种方法 1.使用 ...
- log4j:WARN Please initialize the log4j system properly 问题解决
log4j:WARN No appenders could be found for logger (com.netease.qa.testng.TestngRetry).log4j:WARN Ple ...
- AJAX 缓存
cache 默认为true, 从浏览器里读取缓存. 提高性能 设置为false,则每次从方法获取,不进缓存
- 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...