K-D Tree 模板

news/2026/1/19 21:27:12/文章来源:https://www.cnblogs.com/yaosicheng124/p/19503781
#include<bits/stdc++.h>
using namespace std;
using ld = long double;
using ll = long long;const int MAXN = 200005;
const ll INF = ll(2e18);template<int dimensions>
struct kd_tree {struct Point {ll _[dimensions];};ll dist2(const Point &x, const Point &y) const {ll ret = 0;for(int i = 0; i < dimensions; ++i) {ret += 1ll * (x._[i] - y._[i]) * (x._[i] - y._[i]);}return ret;}ld dist(const Point &x, const Point &y) const {return sqrtl(dist2(x, y));}struct Node {int ls, rs;Point x, l, r;}tr[MAXN];int ROOT;ll ans = INF;ll mind2(const Point &x, int y) {if(!y) {return INF;}ll ret = 0;for(int i = 0; i < dimensions; ++i) {ret += 1ll * max({0ll, tr[y].l._[i] - x._[i], x._[i] - tr[y].r._[i]}) * max({0ll, tr[y].l._[i] - x._[i], x._[i] - tr[y].r._[i]});}return ret;}ld mind(const Point &x, int y) {return (!y ? INF : sqrtl(mind2(x, y)));}void pushup(int u) {tr[u].l = tr[u].r = tr[u].x;for(int i = 0; i < dimensions; ++i) {if(tr[u].ls) {tr[u].l._[i] = min(tr[u].l._[i], tr[tr[u].ls].l._[i]), tr[u].r._[i] = max(tr[u].r._[i], tr[tr[u].ls].r._[i]);}if(tr[u].rs) {tr[u].l._[i] = min(tr[u].l._[i], tr[tr[u].rs].l._[i]), tr[u].r._[i] = max(tr[u].r._[i], tr[tr[u].rs].r._[i]);}}}int build(int l, int r, int k) {if(l > r) {return 0;}int mid = (l + r) >> 1;nth_element(tr + l, tr + mid, tr + r + 1, [k](const Node &x, const Node &y) {return x.x._[k] < y.x._[k];});tr[mid].ls = build(l, mid - 1, (k + 1) % dimensions);tr[mid].rs = build(mid + 1, r, (k + 1) % dimensions);pushup(mid);return mid;}void query(int u, int p) {if(!u) {return;}if(p != u) {ans = min(ans, dist2(tr[u].x, tr[p].x));}ll dl = mind2(tr[p].x, tr[u].ls), dr = mind2(tr[p].x, tr[u].rs);if(dl < dr) {if(dl < ans) {query(tr[u].ls, p);}if(dr < ans) {query(tr[u].rs, p);}}else {if(dr < ans) {query(tr[u].rs, p);}if(dl < ans) {query(tr[u].ls, p);}}}
};int n;
kd_tree<2> kdt;int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; ++i) {cin >> kdt.tr[i].x._[0] >> kdt.tr[i].x._[1];}kdt.ROOT = kdt.build(1, n, 0);for(int i = 1; i <= n; ++i) {kdt.query(kdt.ROOT, i);}cout << fixed << setprecision(4) << sqrtl(kdt.ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课程设计/毕业设计】基于nodejs的演唱会路演中小程序的设计与实现微信小程序 演唱会门票售票系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026年8款免费降AI工具实测推荐,毕业党必看 - 还在做实验的师兄

实测了市面上主流的降AI工具后,推荐嘎嘎降AI(达标率99.26%,性价比最高)、比话降AI(自研Pallas引擎,知网AI率<15%有保障)作为首选。本文详细对比8款工具的效果、价格和适用场景,帮你快速找到最适合的那一款。…

基于深度学习的交通标志检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

本文介绍了一套基于YOLO系列算法的交通标志检测系统。该系统采用深度学习技术,支持55种常见交通标志的识别,具备图片、视频、批量文件及实时摄像头检测功能。系统提供图形化界面,包含模型切换、参数调节、结果统计与…

安全服务是什么

安全服务并非单一产品&#xff0c;而是围绕安全需求展开的系统性解决方案&#xff0c;其核心定义可从服务目标与服务主体两方面解读。 以风险防控为核心目标&#xff1a;安全服务的核心目标是识别、规避、应对各类安全风险&#xff0c;包括网络攻击、数据泄露、系统漏洞等。通过…

毕业季来了!5款降AI率工具横评,最低能降到10%以下 - 还在做实验的师兄

知网AIGC检测系统升级后,传统同义词替换已失效。实测5款降AI率工具,嘎嘎降AI(达标率99.26%)和比话降AI(不达标全额退款)效果最稳定,能将AI率从90%+降到10%以下。本文分享真实测试数据和避坑指南。毕业季来了!5…

微信小程序毕设项目:基于nodejs的演唱会路演中小程序的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

选择高防IP时需要重点关注哪些因素

1、防护能力 防护能力是选择高防IP的核心因素。首先要看其能抵御的DDoS攻击类型&#xff0c;如SYN Flood、UDP Flood、ICMP Flood等&#xff0c;全面的攻击类型防护意味着更高的安全性。其次&#xff0c;关注防护的流量峰值&#xff0c;即高防IP能够处理的最大攻击流量。企业应…

LLM API Gateway:运用Comate Spec Mode创建大模型调用中转服务器

LLM API Gateway:运用Comate Spec Mode创建大模型调用中转服务器2026-01-19 21:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !im…

Label Studio导入预标注数据

1、创建项目2、点击Settings进行项目配置界面&#xff1b;3、设置本地文件的映射地址&#xff08;注意&#xff1a;这一步非常关键&#xff0c;否则导入预标注的json文件时&#xff0c;图片会映像不到&#xff0c;无法正常显示&#xff09; 新建一个Source Storage&#xff1a;…

手把手教你降AI不伤文:保姆级操作让论文既通过检测又保持专业 - 还在做实验的师兄

降AI率最怕的就是把专业术语改没了、论文变得不伦不类。本文教你如何实现「降AI不伤文」:选对工具(推荐嘎嘎降AI)、分段处理、处理后校对。掌握这套方法,可以在AI率降到10%以下的同时,保持论文的学术专业度。手把…

SFT后训练32B-LLM的一些观察

用单一语种数据集SFT 用COIG-CQIA数据集&#xff0c;以及把COIG-CQIA数据集混合guanaco和belle之后的数据集一起SFT 32B-Base模型&#xff0c;或者基于32B-Chat模型SFT&#xff08;1-3 epoch&#xff09;&#xff0c; 目的是想提升LLM在单一语种的效果&#xff0c; 然后在中文…

俄罗斯T1集团代表团到访深兰科技,就具身智能与复杂场景工程化应用达成多项合作共识

2026年1月17日&#xff0c;深兰科技在上海张江总部接待了来自俄罗斯T1集团的代表团一行。深兰科技创始人兼董事长陈海波代表公司参与接待与交流。双方围绕人工智能在银行与金融、高安全行业以及无人系统等复杂场景中的工程化应用路径展开深入探讨&#xff0c;重点交流具身智能、…

深兰科技与伊拉克国家基建发展基金会达成全方位合作:以AI技术全面助力伊拉克国家重建与民生发展

1月17日&#xff0c;深兰科技与伊拉克国家基建发展基金会正式签署全方位合作协议。此次合作谈判历经数轮会谈&#xff0c;双方在基金投资、国家战后基础设施重建、石油炼化智能化升级、数字银行支付系统、基于具身视觉大脑的机器人、基于深兰科技医诊大模型的多级智慧医疗以及A…

2026年8款免费降AI率工具实测推荐,毕业党必看 - 还在做实验的师兄

2026年高校AIGC检测全面升级,传统降重方法已失效。实测8款降AI工具后,推荐嘎嘎降AI(达标率99.26%,性价比最高)、比话降AI(知网AI率<15%保障)作为首选。本文附详细对比表和使用建议,帮你一次搞定论文AI率问题…

Android修改调试屏幕的选择方向

通过ADB命令可控制手机屏幕旋转设置。"adb shell settings put system accelerometer_rotation 0"用于关闭自动旋转功能&#xff0c;"adb shell settings put system user_rotation X"可手动设置显示方向&#xff08;X为0-3的数值&#xff0c;对应不同方向…

从能量阻滞到流动:解码“被动学习”背后的家庭动能重构逻辑

一、现象透视&#xff1a;被误读的“学习问题”实为家庭能量告急信号凌晨两点的家长群里&#xff0c;焦虑如病毒般蔓延&#xff1a;“孩子数学从80掉到55&#xff0c;是不是该换一对一&#xff1f;”“报了补习班&#xff0c;孩子上课却在睡觉……”这些看似“孩子不努力”的表…

chrome浏览器扩展“猫抓”

发现一个非常好用的下载m3u8视频的浏览器扩展“猫抓”。可以用它的“缓存捕捉”功能捕获m3u8直播流。比如在用浏览器观看电视节目时,可以用它把直播流保存在本地。 打开“缓存捕捉”后,勾选“完成捕获自动下载”、“…

机器人焊接节气设备

在现代制造业中&#xff0c;焊接工艺作为连杆生产的核心步骤&#xff0c;其重要性不言而喻。随着环保意识的增强和企业对成本控制的需求日益迫切&#xff0c;焊接作业中的气体消耗问题逐渐成为关注焦点。弧焊电源气体省气装置技术的引入&#xff0c;不仅为降低生产成本开辟了新…

【毕业设计】基于nodejs的演唱会路演中小程序的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Kanass实践教程 - 如何快速导入Jira、Mantis数据

本文将介绍如何快速导入Atlassian Jira与Mantis数据&#xff0c;以实现快速迁移切换。 1、Kanass的安装配置 1.1 安装 下载 点此下载 安装 以centos为例&#xff0c;将Linux下的centos安装包下载&#xff0c;并使用rpm命令安装kanass。 sudo rpm -ivh tiklab-kanass-1.2.…