BZOJ4520 CQOI2016K远点对(KD-Tree+堆)
堆维护第k大,每个点KD-Tree上A*式查询较远点,跑得飞快,复杂度玄学。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define ll long long
#define N 100010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,c,root,cnt;
struct point
{
int d[];
bool operator <(const point&a) const
{
return d[c]<a.d[c];
}
}a[N];
struct KDTree{int ch[],a[][];point p;
}tree[N];
priority_queue<ll,vector<ll>,greater<ll> > q;
ll sqr(int x){return 1ll*x*x;}
ll dis(point u,point v){return sqr(u.d[]-v.d[])+sqr(u.d[]-v.d[]);}
ll dis(point u,int a[][]){return sqr(max(u.d[]-a[][],a[][]-u.d[]))+sqr(max(u.d[]-a[][],a[][]-u.d[]));}
void build(int &k,int l,int r,int op)
{
if (l>r) return;
k=++cnt,c=op;int mid=l+r>>;nth_element(a+l,a+mid,a+r+);
tree[k].p=a[mid];tree[k].a[][]=tree[k].a[][]=a[mid].d[],tree[k].a[][]=tree[k].a[][]=a[mid].d[];
for (int i=l;i<=r;i++)
tree[k].a[][]=min(tree[k].a[][],a[i].d[]),tree[k].a[][]=max(tree[k].a[][],a[i].d[]),
tree[k].a[][]=min(tree[k].a[][],a[i].d[]),tree[k].a[][]=max(tree[k].a[][],a[i].d[]);
build(tree[k].ch[],l,mid-,op^);
build(tree[k].ch[],mid+,r,op^);
}
void query(int k,point p)
{
if (dis(tree[k].p,p)>=q.top()) q.push(dis(tree[k].p,p)),q.pop();
int l=tree[k].ch[],r=tree[k].ch[];ll u=dis(p,tree[l].a),v=dis(p,tree[r].a);
if (u<v) swap(l,r),swap(u,v);
if (l&&u>=q.top()) query(l,p);
if (r&&v>=q.top()) query(r,p);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4520.in","r",stdin);
freopen("bzoj4520.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read()<<;
for (int i=;i<=n;i++) a[i].d[]=read(),a[i].d[]=read();
build(root,,n,);
while (m--) q.push();
for (int i=;i<=n;i++) query(root,a[i]);
cout<<q.top();
return ;
}
BZOJ4520 CQOI2016K远点对(KD-Tree+堆)的更多相关文章
- BZOJ4520:[CQOI2016]K远点对(K-D Tree)
Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标 ...
- BZOJ 4520: [Cqoi2016]K远点对(k-d tree)
Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1162 Solved: 618[Submit][Status][Discuss] Descripti ...
- K-D Tree题目泛做(CXJ第二轮)
题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- [学习笔记]K-D Tree
以前其实学过的但是不会拍扁重构--所以这几天学了一下 \(K-D\ Tree\) 的正确打开姿势. \(K\) 维 \(K-D\ Tree\) 的单次操作最坏时间复杂度为 \(O(k\times n^ ...
- 初涉k-d tree
听说k-d tree是一个骗分的好东西?(但是复杂度差评??? 还听说绍一的kdt常数特别小? KDT是什么 KDT的全称是k-degree tree,顾名思义,这是一种处理多维空间的数据结构. 例如 ...
- BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)
Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...
- BZOJ 3053: The Closest M Points(K-D Tree)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1235 Solved: 418[Submit][Status][Discuss] Descripti ...
- BZOJ 1941: [Sdoi2010]Hide and Seek(k-d Tree)
Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 1712 Solved: 932[Submit][Status][Discuss] Descripti ...
随机推荐
- Jmeter—开篇
Jmeter以开源.轻便著称,做接口测试.性能测试都可以借助Jmeter,从这篇开始记录我使用到的Jmeter功能. 安装 Jmeter官网:http://jmeter.apache.org/ 去官网 ...
- mvc 在view视图中直接输出rdlc报表文件(Excel、PDF、Word)
给一段代码做参考 public ActionResult RdlcReport(string code) { LocalReport localReport = new LocalReport(); ...
- 基于树莓派3的CAN总线编程
基于树莓派3的CAN总线编程 原创 2016年09月08日 10:16:13 标签: 树莓派3 / MCP2515 / CAN总线 / python / 命令行 5254 简介 树莓派3使用Pytho ...
- 大数据入门第二十五天——logstash入门
一.概述 1.logstash是什么 根据官网介绍: Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然后将数据发送到您最喜欢的 “存储库” 中.(我们的存储库 ...
- c# speech 文本转语言
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 2017-2018-2 20155203《网络对抗技术》Exp4 恶意代码分析
1. 实践过程记录 1. 使用Windows计划任务schtasks监控系统运行 Windows计划任务schtasks监控系统: 在C盘建立一个netstatlog.bat文件,用来将记录的联网结果 ...
- IT高管和易筋经的故事
老板是我非常敬重的前领导之一,他的一些管理风格,也影响了后来我对技术团队的管理. 理想企业 什么是程序员理想的IT企业?公司里面有良好的同事关系,合理的产品需求和开发进度,最好老板懂点编程,这样公司更 ...
- R绘图 第五篇:绘制散点图(ggplot2)
ggplot2包中绘制点图的函数有两个:geom_point和 geom_dotplot,当使用geom_dotplot绘图时,point的形状是dot,不能改变点的形状,因此,geom_dotplo ...
- Js_Eval方法
定义和用法eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法eval(string) 其中参数string为必需.是要计算的字符串,其中含有要计算的 JavaScr ...
- X32位 天堂2 二章/三章 服务端协议号修改方法
[本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...