热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU5992FindingHotelsKDtree

题目链接:http:acm.split.hdu.edu.cnshowproblem.php?pid5992题意:给出n个酒店,每个酒店有

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5992

题意:给出n个酒店,每个酒店有一个花费和坐标。然后给出m个询问,输出离询问最近并且花费在询问要求内的酒店。

解法:第一个想法是两种东西按照花费排序,每次插入新酒店。但是这个插入比较麻烦,在kdtree退化的时候需要及时重构(套个替罪羊树啥的)。 还有一种就是直接建三维kdtree,然后对于每一个询问,如果一个节点范围内最小第三维比询问大,那么可以直接忽略。计算的时候只要算上两维的距离即可。(似乎这样比较慢的)。


#include
using namespace std;
const int maxn = 200010;
typedef long long LL;
const LL inf = 1e18;
LL n, m, D, root;
struct node{LL l, r, d[3], mx[3], mi[3], c, id;
}a[maxn];
bool cmp(node x, node y){return x.d[D] }
void up(LL k, LL s){for(LL i&#61;0; i<3; i&#43;&#43;){a[k].mi[i] &#61; min(a[k].mi[i], a[s].mi[i]);a[k].mx[i] &#61; max(a[k].mx[i], a[s].mx[i]);}
}
LL build(LL l, LL r, LL dd){D&#61;dd;LL mid&#61;(l&#43;r)/2;nth_element(a&#43;l&#43;1,a&#43;mid&#43;1,a&#43;r&#43;1,cmp);for(LL i&#61;0; i<3; i&#43;&#43;) a[mid].mi[i]&#61;a[mid].mx[i]&#61;a[mid].d[i];if(l!&#61;mid) a[mid].l&#61;build(l,mid-1,(dd&#43;1)%3);else a[mid].l&#61;0;if(mid!&#61;r) a[mid].r&#61;build(mid&#43;1,r,(dd&#43;1)%3);else a[mid].r&#61;0;if(a[mid].l) up(mid,a[mid].l);if(a[mid].r) up(mid,a[mid].r);return mid;
}
LL Sqr(LL x){return x*x;
}
LL x,y,z,ans,dis;
LL getdis(LL p){LL res&#61;0;if(za[p].mx[0]) res&#43;&#61;Sqr(x-a[p].mx[0]);if(xa[p].mx[1]) res&#43;&#61;Sqr(y-a[p].mx[1]);if(y}
void ask(LL p){LL dl,dr,d0&#61;0;if(a[p].d[2]>z) d0&#61;inf;if(d0&#61;&#61;0){d0&#43;&#61;Sqr(a[p].d[0]-x)&#43;Sqr(a[p].d[1]-y);if(d0}
int main(){LL T;scanf("%lld", &T);while(T--){scanf("%lld%lld", &n,&m);for(LL i&#61;1; i<&#61;n; i&#43;&#43;){for(LL j&#61;0;j<3;j&#43;&#43;) scanf("%lld", &a[i].d[j]);a[i].l&#61;a[i].r&#61;0;a[i].id&#61;i;}root&#61;build(1, n, 0);for(LL i&#61;1; i<&#61;m; i&#43;&#43;){scanf("%lld%lld%lld", &x,&y,&z);dis&#61;inf;ans&#61;-1;ask(root);printf("%lld %lld %lld\n",a[ans].d[0],a[ans].d[1],a[ans].d[2]);}}return 0;
}






推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
author-avatar
jiho_b
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有