[国家集训队2012]JZPFAR

题目

平面上有n个点。现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号。如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大。

INPUT

第一行,一个整数n,表示点的个数。
下面n行,每行两个整数x_i, y_i,表示n个点的坐标。点的标号按照输入顺序,分别为1..n。
下面一行,一个整数m,表示询问个数。
下面m行,每行三个整数px_i, py_i, k_i,表示一个询问。

OUTPUT

m行,每行一个整数,表示相应的询问的答案。

SAMPLE

INPUT

3
0 0
0 1
0 2
3
1 1 2
0 0 3
0 1 1

OUTPUT

3
1
1

解题报告

首道K-D树

然而只是照着打了个板子QAQ

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
typedef long long L;
const L inf((L)1e16);
int now,n,m,k;
inline int read(){
int sum(),f();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar())
if(ch=='-')
f=-;
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum*f;
}
struct point{
L a[];
inline bool operator<(const point &b)const{
return a[now]<b.a[now]||(a[now]==b.a[now]&&a[now^]<b.a[now^]);
}
L &operator[](int x){
return a[x];
}
}p[],cmp;
struct data{
L dis,id;
inline bool operator<(const data &a)const{
return dis==a.dis?id<a.id:dis>a.dis;
}
};
priority_queue<data>q;
inline L pf(L x){
return x*x;
}
inline L dis(point x,point y){
return pf(x[]-y[])+pf(x[]-y[]);
}
struct node{
node *lch,*rch;
point key;
int mn[],mx[];
node(point &x):key(x),lch(NULL),rch(NULL){
mn[]=mx[]=x[];
mn[]=mx[]=x[];
}
inline void pushup(node *x){
if(x==NULL)
return;
mn[]=min(mn[],x->mn[]),mn[]=min(mn[],x->mn[]);
mx[]=max(mx[],x->mx[]),mx[]=max(mx[],x->mx[]);
}
inline L cal_dis(){
L ret();
ret=max(ret,dis((point){mn[],mn[]},cmp));
ret=max(ret,dis((point){mn[],mx[]},cmp));
ret=max(ret,dis((point){mx[],mn[]},cmp));
ret=max(ret,dis((point){mx[],mx[]},cmp));
return ret;
}
}*root;
inline void build(node *&rt,int l,int r,int d){
if(l>r)
return;
int mid((l+r)>>);
now=d;
nth_element(p+l,p+mid,p+r+);
rt=new node(p[mid]);
build(rt->lch,l,mid-,d^);
build(rt->rch,mid+,r,d^);
rt->pushup(rt->lch);
rt->pushup(rt->rch);
}
inline void query(node *rt){
if(rt==NULL)
return;
if(q.size()==k&&rt->cal_dis()<q.top().dis)
return;
data ret((data){dis(rt->key,cmp),rt->key[]});
if(q.size()<k)
q.push(ret);
else
if(ret<q.top())
q.pop(),q.push(ret);
L dis_l(rt->lch==NULL?inf:rt->lch->cal_dis());
L dis_r(rt->rch==NULL?inf:rt->rch->cal_dis());
if(dis_l>dis_r){
query(rt->lch);
if(dis_r>=q.top().dis||q.size()<k)
query(rt->rch);
}
else{
query(rt->rch);
if(dis_l>=q.top().dis||q.size()<k)
query(rt->lch);
}
}
inline int gg(){
freopen("jzpfar.in","r",stdin);
freopen("jzpfar.out","w",stdout);
n=read();
for(int i=;i<=n;++i)
p[i][]=read(),p[i][]=read(),p[i][]=i;
build(root,,n,);
m=read();
while(m--){
cmp[]=read(),cmp[]=read(),k=read();
while(!q.empty())
q.pop();
query(root);
printf("%d\n",q.top().id);
}
return ;
}
int K(gg());
int main(){;}

[国家集训队2012]JZPFAR的更多相关文章

  1. [国家集训队2012]middle

    http://cogs.pro:8080/cogs/problem/problem.php?pid=1763 二分答案x 把区间内>=x的数设为1,<x的数设为-1 左端点在[a,b]之间 ...

  2. [国家集训队2012]tree(陈立杰)

    [国家集训队2012]tree(陈立杰) 题目 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. INPUT 第一行V,E,need分别表示 ...

  3. 数据结构(动态树):[国家集训队2012]tree(伍一鸣)

    [问题描述] 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原 ...

  4. 【国家集训队2012】tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:  + u v c:将u到v的路径上的点的权值都加上自然数c:  - u1 v1 u2 ...

  5. [COGS 1799][国家集训队2012]tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  6. cogs1799 [国家集训队2012]tree(伍一鸣)

    LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<a ...

  7. BZOJ2568 [国家集训队2012]比特集合

    Description 比特集合是一种抽象数据类型(Abstract Data Type) ,其包含一个集合S,并支持如下几种操作: INS M : 将元素 M 插入到集合S中: DEL M : 将集 ...

  8. [国家集训队2012]middle(陈立杰)

    我是萌萌的传送门 我是另一个萌萌的传送门 脑残错误毁一下午…… 其实题解早就烂大街了,然而很久之前我只知道是二分答案+主席树却想不出来这俩玩意儿怎么一块儿用的……今天又翻了几篇题解才恍然大悟,是把权值 ...

  9. [国家集训队2012]tree(陈立杰) 题解(二分+最小生成树)

    tree 时间限制: 3 Sec  内存限制: 512 MB 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V, ...

随机推荐

  1. 【BZOJ 3032】 七夕祭

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3032 [算法] 交换左右两个相邻格子的摊点,不会改变这一行的摊点个数 交换上下两个相 ...

  2. ES6详解八:模块(Module)!--各种导入导出方法

    [-] 基本用法 命名导出named exports 默认导出 命名导出结合默认导出 仅支持静态导入导出 各种导入和导出方式总结   modules是ES6引入的最重要一个特性. 所以以后再写模块,直 ...

  3. [Swift通天遁地]七、数据与安全-(16)检测Apple设备是否越狱

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. Java使用Cipher类实现加密,包括DES,DES3,AES和RSA加密

    一.先看一个简单加密,解密实现 1.1 加密 /** * content: 加密内容 * slatKey: 加密的盐,16位字符串 * vectorKey: 加密的向量,16位字符串 */ publi ...

  5. python中set元素为可迭代元素相加

    #a 与 b必须是两个相同类型的可迭代对象 a = "1" b = "2" print(set(a + b))  # {'1', '2'} a = " ...

  6. session一致性架构设计实践.

    一.缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文. Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建se ...

  7. (转)Vue 爬坑之路(四)—— 与 Vuex 的第一次接触

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  8. Raspberry Pi开发之旅-光照强度检测(BH1750)

    一.前期准备 1.环境要求 GY30模块(BH1750FVI传感器),树莓派系统,python-smbus,iic开启 2.取消对IIC驱动的黑名单 nano /etc/modprobe.d/rasp ...

  9. canves应用

    canves用得好可以有好多效果: html:<canvas id="myCanvas" width="700" height="300&quo ...

  10. SQL基本操作——DROP撤销索引、表以及数据库

    DROP撤销索引.表以及数据库 --DROP INDEX 命令删除表格中的索引 DROP INDEX table_name.index_name --DROP TABLE 语句删除表(表的结构.属性以 ...