Hdu-5992 2016ACM/ICPC亚洲区青岛站 K.Finding Hotels KDtree
题意:二维平面上有很多点,每个点有个权值,现在给你一个点(很多组),权值v,让你找到权值小于等于v的点中离这个点最近的,相同的输出id小的
题解:很裸的KDtree,但是查询的时候有2个小限制,
1个是要小于等于v,1个是输出最小id
第一个,对每个点判断dis的时候 如果价钱高于v 距离就变为INF 低于v就没有影响
第二个,如果disl或者disr 和当前最近的dis 相等 就继续询问以得到更小的id
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+;
const ll INF=1e18;
int T,n,m;
struct point
{
ll x[];
int c,id;
}p[N],d;
ll idd,ansid,ans;
ll sqr(ll x) {return x*x;}
int cur;
bool cmp(point a,point b)
{
return a.x[cur]<b.x[cur];
}
void build(int l,int r,int dep)
{
if(l>=r) return;
int mid=(l+r)>>;
cur=dep%;
nth_element(p+l,p+mid,p+r+,cmp);
build(l,mid-,dep+);
build(mid+,r,dep+);
}
ll dis(point a,point b)
{
ll ans=;
for(int i=;i<;++i) ans+=sqr(a.x[i]-b.x[i]);
return ans;
}
ll ff(point x,int l,int r,int dep)
{
int cur=dep%;
if(l>=r) {
if(l==r&&x.c>=p[l].c) {
ll cnt=dis(x,p[l]);
if(p[l].c<=x.c&&(cnt<ans||(cnt==ans&&p[l].id<ansid)))
{
ansid=p[l].id;
ans=cnt;
idd=l;
}
}
return INF;
}
int mid=(l+r)>>;
ll res=dis(x,p[mid]);
if(p[mid].c<=x.c&&(res<ans||(res==ans&&p[mid].id<ansid)))
{
ans=res;ansid=p[mid].id;
idd=mid;
}
ll tmp;
if(x.x[cur]<p[mid].x[cur])
{
tmp=ff(x,l,mid-,dep+);
if(ans>sqr(x.x[cur]-p[mid].x[cur])) ff(x,mid+,r,dep+);
}
else
{
tmp=ff(x,mid+,r,dep+);
if(ans>sqr(x.x[cur]-p[mid].x[cur])) ff(x,l,mid-,dep+);
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<n;++i)
{
scanf("%d%d%d",&p[i].x[],&p[i].x[],&p[i].c);
p[i].id=i;
}
build(,n-,);
while(m--)
{
scanf("%d%d%d",&d.x[],&d.x[],&d.c);
ans=INF;
ff(d,,n-,);
printf("%lld %lld %lld\n",p[idd].x[],p[idd].x[],p[idd].c);
}
}
}
Hdu-5992 2016ACM/ICPC亚洲区青岛站 K.Finding Hotels KDtree的更多相关文章
- Hdu-5983 2016ACM/ICPC亚洲区青岛站 B.Pocket Cube 模拟
题面 题意:给你一个2*2的魔方,给你每个面每个小块的颜色,一共24个,然后问你能否在一步之内还原. 题解:手动在纸上画,推出每种变化对应的置换,显然,一共有6种,而且可以当成3种,(具体哪3种,就是 ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
Counting Cliques Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Thickest Burger Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
Relative atomic mass Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)
Convex Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...
随机推荐
- 三星A3、A5、A7、G7、J5、J7、S6系列等新机型的部分手机解锁 ROOT刷机
三星A3.A5.A7.G7.J5.J7.S6系列等新机型的部分手机,三星官方加了限制,需要解锁后才能刷机如果没有解锁,刷第三方recovery或者刷非官方原版固件,都会刷不进,手机跳转到提示界面,显示 ...
- I2C controller core之Bit controller(04)
4) detect start/stop condition START- falling edge on SDA while SCL is high; STOP - rising edge on ...
- 存档:Telerik Test Studio的摸索笔记
http://www.51testing.com/?uid-170604-action-spacelist-starttime-1328025600-endtime-1330531200 http:/ ...
- monad - the Category hierachy
reading the "The Typeclassopedia" by Brent Yorgey in Monad.Reader#13 ,and found that " ...
- Memcached 之增删改查命令
memcache是高性能 ,分布式的内存对象缓存系统,非关系型数据库. 一.增 语法:add key flag expire length key:值的一个名字 flag:一个标志,是一个正整 ...
- webpack核心提炼
基本是学习的时候在网上整理的资料,并非自己原创,这篇文章的的主要目的是记录webpack.config.js的配置方式.可能也有不少错误,欢迎指正!! 一.应用场景 前端模块化开发.功能拓展.css预 ...
- ldap 基本名词解释(3)
名词解释 Objectclass LDAP对象类,是LDAP内置的数据模型.每种objectClass有自己的数据结构,比如我们有一种叫“电话薄”的objectClass,肯定会内置很多属性(attr ...
- What identity values you get with the @@IDENTITY and SCOPE_IDENTITY functions
--测试表及数据 CREATE TABLE TZ ( Z_id int IDENTITY(1,1)PRIMARY KEY, Z_name varchar(20) NOT NULL) INSE ...
- string.Format 格式化日期格式
DateTime dt = DateTime.Now;//2010年10月4日 17点05分 string str = ""; //st ...
- 利用IO多路复用,使用linux下的EpollSelector实现并发服务器
import socket import selectors # IO多路复用选择器的模块 # 实例化一个和epoll通信的选择器 epoll_selector = selectors.EpollSe ...