【牛客网】Finding Hotel
【牛客网】Finding Hotel
忘记K远点对的剪枝的我有点自闭
事实上我们只要先建一棵KD树出来,维护一下所在的矩形,和子树里的最小值
每次查询的时候如果最小值比查询的值要大的话就退出
当前的答案构成了一个圆,若圆和矩形没有交就退出(不一定很严格,可以认为是以圆心为中心向上下左右延伸半径长度的一个正方形和矩形有交)
然后看当前点在哪个子树的矩形里,先搜那个子树,如果回来后在另一个子树里可能达到的最小值都没有答案大就不搜索另一棵子树
#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 200005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N,dimension,M,rt,Ncnt;
struct node {
int d[2],c,id;
}p[MAXN];
bool cmp(node a,node b) {
return a.d[dimension] < b.d[dimension];
}
struct KD {
node p;
int r[4],lc,rc,mc;
}tr[MAXN];
#define lc(u) tr[u].lc
#define rc(u) tr[u].rc
void build(int &u,int l,int r,int d) {
u = 0;
if(l > r) return;
u = ++Ncnt;
dimension = d;
int mid = (l + r) >> 1;
nth_element(p + l,p + mid,p + r + 1,cmp);
tr[u].p = p[mid];
for(int i = 0 ; i < 4 ; ++i) tr[u].r[i] = tr[u].p.d[i & 1];
build(lc(u),l,mid - 1,d ^ 1);build(rc(u),mid + 1,r,d ^ 1);
tr[u].mc = min(p[mid].c,min(tr[lc(u)].mc,tr[rc(u)].mc));
for(int i = 0 ; i < 2 ; ++i) tr[u].r[i] = min(tr[u].r[i],min(tr[lc(u)].r[i],tr[rc(u)].r[i]));
for(int i = 2 ; i < 4 ; ++i) tr[u].r[i] = max(tr[u].r[i],max(tr[lc(u)].r[i],tr[rc(u)].r[i]));
}
node ans;
int64 o(int64 x) {return x * x;}
int64 dis(node a,node b) {
return o(a.d[0] - b.d[0]) + o(a.d[1] - b.d[1]);
}
bool checkin(node x,int u) {
for(int i = 0 ; i <= 1 ; ++i) {
if(x.d[i] < tr[u].r[i] || x.d[i] > tr[u].r[i | 2]) return false;
}
return true;
}
int64 min_possible(node x,int u) {
for(int i = 0 ; i <= 1 ; ++i) {
if(x.d[i] < tr[u].r[i] || x.d[i] > tr[u].r[i | 2]) {
return min(o(tr[u].r[i] - x.d[i]),o(tr[u].r[i | 2] - x.d[i]));
}
}
return 1e18;
}
void Query(int u,node pos) {
if(!u) return;
if(tr[u].mc > pos.c) return;
if(tr[u].p.c <= pos.c) {
if(dis(tr[u].p,pos) < dis(ans,pos) || (dis(tr[u].p,pos) == dis(ans,pos) && tr[u].p.id < ans.id)) ans = tr[u].p;
}
int64 d = dis(ans,pos);
for(int i = 0 ; i <= 1 ; ++i) {
if(pos.d[i] < tr[u].r[i] && 1LL * (tr[u].r[i] - pos.d[i]) * (tr[u].r[i] - pos.d[i]) > d) return;
if(pos.d[i] > tr[u].r[i | 2] && 1LL * (tr[u].r[i | 2] - pos.d[i]) * (tr[u].r[i | 2] - pos.d[i]) > d) return;
}
int s = checkin(pos,lc(u)) ? lc(u) : rc(u);
int t = s == lc(u) ? rc(u) : lc(u);
Query(s,pos);
if(min_possible(pos,t) <= dis(pos,ans)) Query(t,pos);
}
void Solve() {
rt = 0;Ncnt = 0;
read(N);read(M);
for(int i = 1 ; i <= N ; ++i) {
read(p[i].d[0]);read(p[i].d[1]);read(p[i].c);
p[i].id = i;
}
tr[0].mc = 1e9;
tr[0].r[0] = tr[0].r[1] = 1e9;
tr[0].r[2] = tr[0].r[3] = -1;
build(rt,1,N,0);
node pos;
for(int i = 1 ; i <= M ; ++i) {
read(pos.d[0]);read(pos.d[1]);read(pos.c);
ans.d[0] = 1e9;ans.d[1] = 1e9;ans.c = 0;ans.id = 1e9;
Query(1,pos);
out(ans.d[0]);space;out(ans.d[1]);space;out(ans.c);enter;
}
}
int main(){
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
int T;
read(T);
while(T--) Solve();
return 0;
}
【牛客网】Finding Hotel的更多相关文章
- 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板
链接:https://www.nowcoder.com/acm/contest/141/J来源:牛客网 Eddy has graduated from college. Currently, he i ...
- 牛客网 --java问答题
http://www.nowcoder.com/ 主要是自己什么都不怎么会.在这里可以学习很多的! 第一天看题自己回答,第二天看牛客网的答案! 1 什么是Java虚拟机?为什么Java被称作是“平台无 ...
- 牛客网《BAT面试算法精品课》学习笔记
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
- C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - ...
- 牛客网第9场多校E(思维求期望)
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 题目描述 Niuniu likes to play OSU! We simplify the ...
- 牛客网暑期ACM多校训练营(第七场)Bit Compression
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...
- Beautiful Numbers(牛客网)
链接:https://ac.nowcoder.com/acm/problem/17385来源:牛客网 题目描述 NIBGNAUK is an odd boy and his taste is stra ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)
链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
随机推荐
- Kalman实际应用总结
目录 Kalman理论介绍 一. 简单理论介绍理论 二. 升华理论介绍 Kalman基本应用 一. Kalman跟踪/滤波 二. Kalman预测/融合(单传感器) 三. Kalman多传感器融合A ...
- 阿里云服务器linux系统上 安装node环境
今天将阿里云服务器重windows系统重置成了linux系统, 点击上面的实例名称,进入到 点击 更换系统盘 选择linux 的centos版本(操作前需要 停止实例) 弄好后,启动实例 下面 ...
- [WEB安全]给BurpSuite设置非本地的网络代理
目录 0x01 一般情况 0x02 移动端流量抓取 0x03 多重代理的情形 0x04 参考链接 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一. BurpSuite的核心是代理Pro ...
- NPM私有包部署到私有仓库
NPM私有包部署到私有仓库1.项目部署到NPM2.私有仓库的搭建1,项目部署到NPM注册NPM账号注册地址:https://www.npmjs.com/ 注册完成后进入邮箱验证 账号登录 npm lo ...
- HashMap 在高并发下引起的死循环
HashMap 基本实现(JDK 8 之前) HashMap 通常会用一个指针数组(假设为 table[])来做分散所有的 key,当一个 key 被加入时,会通过 Hash 算法通过 key 算出这 ...
- What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
What are the benefits to using anonymous functions instead of named functions for callbacks and par ...
- 神经网络模型(Backbone)
自己搭建神经网络时,一般都采用已有的网络模型,在其基础上进行修改.从2012年的AlexNet出现,如今已经出现许多优秀的网络模型,如下图所示. 主要有三个发展方向: Deeper:网络层数更深,代表 ...
- <JavaScript>尺寸类样式的获取
尺寸类样式的获取 offsetHeight HTMLElement.offsetHeight 是一个只读属性,它返回该元素的像素高度,高度包含该元素的垂直内边距和边框,且是一个整数.(content+ ...
- flutter的生命周期
大致可以看成三个阶段 初始化(插入渲染树) 状态改变(在渲染树中存在) 销毁(从渲染树种移除) initState 当插入渲染树的时候调用,这个函数在生命周期中只调用一次.这里可以做一些初始化工作,比 ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_08-课程预览技术方案
3.2.1 技术需求 课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大.此页面的内容设 计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打 ...