【BZOJ】【2626】JZPFAR
KD-Tree
0.0找第k大……
裸KD-Tree……跟之前那道找最近的k个点大同小异
一开始理解错:第K大是第K远……不是第K近……(Tunix你个sb
感觉容易出错的是0号点= =边界情况需要仔细处理……根据题意而定的,比如这题就必须将0号点的距离设置成最近……比如-2……(因为我一开始向堆里加的占位点的距离是-1
/**************************************************************
Problem: 2626
User: Tunix
Language: C++
Result: Accepted
Time:12956 ms
Memory:4796 kb
****************************************************************/ //BZOJ 2626
#include<queue>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
#define sqr(x) (x)*(x)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=,INF=1e9;
/*******************template********************/
int n,m,root,D;
struct Poi{
int d[],mn[],mx[],l,r,num;
int& operator [] (int x){return d[x];}
void read(){d[]=getint();d[]=getint();}
}t[N],now; bool operator < (Poi a,Poi b) {return a[D]<b[D];}
struct node{
LL dis;int num;
node(LL d=,int n=):dis(d),num(n){}
};
bool operator < (const node &a,const node &b){
return a.dis>b.dis || (a.dis==b.dis && a.num<b.num);
}
#define L t[o].l
#define R t[o].r
#define mid (l+r>>1)
void Push_up(int o){
F(i,,){
t[o].mn[i]=min(t[o].mn[i],min(t[L].mn[i],t[R].mn[i]));
t[o].mx[i]=max(t[o].mx[i],max(t[L].mx[i],t[R].mx[i]));
}
}
int build(int l,int r,int dir){
D=dir;
nth_element(t+l,t+mid,t+r+);
int o=mid;
F(i,,) t[o].mn[i]=t[o].mx[i]=t[o][i];
if (l<mid) L=build(l,mid-,dir^);
if (r>mid) R=build(mid+,r,dir^);
Push_up(o);
return o;
} inline LL dis(Poi a,Poi b){return (LL)sqr(a[]-b[])+(LL)sqr(a[]-b[]);}
inline LL getdis(int o){
if (!o) return -;
LL ans=;
F(i,,)
ans+=max((LL)sqr(t[o].mx[i]-now[i]),(LL)sqr(t[o].mn[i]-now[i]));
return ans;
}
priority_queue<node>Q; void query(int o){
if (!o) return;
LL dl=getdis(L),dr=getdis(R),d0=dis(t[o],now);
if (d0>Q.top().dis || (d0==Q.top().dis && t[o].num<Q.top().num)){
Q.pop(); Q.push(node(d0,t[o].num));
}
if (dl>dr){
if (dl>=Q.top().dis) query(L);
if (dr>=Q.top().dis) query(R);
}else{
if (dr>=Q.top().dis) query(R);
if (dl>=Q.top().dis) query(L);
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("2626.in","r",stdin);
freopen("2626.out","w",stdout);
#endif
F(i,,) t[].mn[i]=INF,t[].mx[i]=-INF;
n=getint();
F(i,,n) t[i].read(),t[i].num=i;
root=build(,n,);
int T=getint();
while(T--){
now.read(); int k=getint();
// printf("%d %d %d\n",now[0],now[1],k);
while(!Q.empty()) Q.pop();
F(i,,k) Q.push(node(-,));
query(root);
printf("%d\n",Q.top().num);
// printf("Q.size()=%d\n",Q.size());
// F(i,1,k)
// printf("%d -- %lld %lld\n",i,Q.top().dis,Q.top().num),Q.pop();
// puts("");
}
return ;
}
2626: JZPFAR
Time Limit: 50 Sec Memory Limit: 128 MB
Submit: 665 Solved: 248
[Submit][Status][Discuss]
Description
Input
下面n行,每行两个整数x_i, y_i,表示n个点的坐标。点的标号按照输入顺序,分别为1..n。
下面一行,一个整数m,表示询问个数。
下面m行,每行三个整数px_i, py_i, k_i,表示一个询问。
Output
Sample Input
0 0
0 1
0 2
3
1 1 2
0 0 3
0 1 1
Sample Output
1
1
数据规模和约定
50%的数据中,n个点的坐标在某范围内随机分布。
100%的数据中,n<=10^5, m<=10^4, 1<=k<=20,所有点(包括询问的点)的坐标满足绝对值<=10^9,n个点中任意两点坐标不同,m个询问的点的坐标在某范围内随机分布。
HINT
Source
【BZOJ】【2626】JZPFAR的更多相关文章
- 【Bzoj 1835 基站选址】
基站选址的区间里隐藏着DP优化的机密…… 分析: 不论是做过乘积最大还是石子合并,或者是其他的入门级别的区间DP题目的人呐,大米并认为读题后就能够轻松得出一个简洁明了的Dp转移方程. ...
- 【BZOJ 2744 朋友圈】
Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1570 Solved: 532[Submit][Status][Discuss] Descripti ...
- 【BZOJ 5038 不打兔子】
Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 22 Solved: 8[Submit][Status][Discuss] Description 勤 ...
- 【BZOJ 1088 扫雷Mine】模拟
http://www.lydsy.com/JudgeOnline/problem.php?id=1088 2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目. 第一列的 ...
- 【BZOJ做题记录】07.07~?
在NOI一周前重开一个坑 最后更新时间:7.08 07:38 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后 ...
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
- 【BZOJ 4151 The Cave】
Time Limit: 5 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 293 Solved: 144[Submit][Status][Di ...
- 【BZOJ 2458 最小三角形】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1551 Solved: 549[Submit][Status][Discuss] Descripti ...
- 【BZOJ 5000 OI树】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 107 Solved: 64[Submit][Status][Discuss] Description ...
- 【BZOJ 5047 空间传送装置】
Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 282 Solved: 121[Submit][Status][Discuss] Descriptio ...
随机推荐
- Java学习笔记之:Struts2.0 环境搭建
一.介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 二 ...
- thinkphp条用函数与类库
手册上说的很冗余,没看懂,下面简单的讲一下具体用法. 函数调用: lib公共函数库叫 common.php App/common/common.php 分组模块下的公共函数库叫 function.ph ...
- spring boot thymeleaf常用方式
动态和静态区别 静态页面的return默认是跳转到/static/index.html,当在pom.xml中引入了thymeleaf组件,动态跳转会覆盖默认的静态跳转,默认就会跳转到/template ...
- iOS 11开发教程(十)iOS11无线连接手机真机测试
iOS 11开发教程(十)iOS11无线连接手机真机测试 在Xcode 9.0中,已经可以通过无线连接手机进行真机测试了.具体的操作步骤如下: (1)首先需要使用数据线将手机连接到苹果电脑上. (2) ...
- 【转】高效率编辑器VIM
最近实习的时候需要在服务器上做Debug,不得不用到vim的相关操作.以前对vim这种被码农无数赞扬的神器望而却步,但今天试了之后感觉还是不错的.以后争取少用鼠标,少用insert模式. 这是从网上看 ...
- DHTML参考手册
中文DHTML参考手册 本dhtml教程由宏博内容管理系统为它的Smarty模板制作者收集的,目的是可以做出更加精美的模板.下面列出了由动态 HTML 定义的对象.DHTML中文参考手册,实用dhtm ...
- nginx与Lua执行顺序
Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 ...
- python开发_imghdr_图像格式支持
在python中,imghdr模块对图像格式提供了支持 该模块主要是处理识别图像的格式 imghdr模块提供的函数如下: imghdr.what(filename, h=None) Tests the ...
- RTSP交互过程
步骤一: 发送:OPTIONS rtsp://127.0.0.1/172.30.31.225:8000:HIK-DS8000HC:0:1:admin:hs123456:av_stream RTSP/1 ...
- android点滴之ContentObserver的使用
一概念 ContentObserver用于观察(捕捉)特定Uri引起的数据的变化,继而做一些对应的处理,当ContentObserver所观察的Uri发生变化时,便会触发它. 从概念看ContentO ...