尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

KD Tree

KD Tree
📅 发布时间:2026/6/19 6:23:03

KD Tree

在第 \(k\) 维上的单次查询复杂度最坏为 \(\mathcal O(n^{1-k^{-1}})\)。

struct KDT {constexpr static int N = 1e5 + 10, K = 2;double alpha = 0.725;struct node {int info[K];int mn[K], mx[K];} tr[N];int ls[N], rs[N], siz[N], id[N], d[N];int idx, rt, cur;int ans;KDT() {rt = 0;cur = 0;memset(ls, 0, sizeof ls);memset(rs, 0, sizeof rs);memset(d, 0, sizeof d);}void apply(int p, int son) {if (son) {for (int i = 0; i < K; i++) {tr[p].mn[i] = min(tr[p].mn[i], tr[son].mn[i]);tr[p].mx[i] = max(tr[p].mx[i], tr[son].mx[i]);}siz[p] += siz[son];}}void maintain(int p) {for (int i = 0; i < K; i++) {tr[p].mn[i] = tr[p].info[i];tr[p].mx[i] = tr[p].info[i];}siz[p] = 1;apply(p, ls[p]);apply(p, rs[p]);}int build(int l, int r) {if (l > r) return 0;vector<double> avg(K);for (int i = 0; i < K; i++) {for (int j = l; j <= r; j++) {avg[i] += tr[id[j]].info[i];}avg[i] /= (r - l + 1);}vector<double> var(K);for (int i = 0; i < K; i++) {for (int j = l; j <= r; j++) {var[i] += (tr[id[j]].info[i] - avg[i]) * (tr[id[j]].info[i] - avg[i]);}}int mid = (l + r) / 2;int x = max_element(var.begin(), var.end()) - var.begin();nth_element(id + l, id + mid, id + r + 1, [&](int a, int b) {return tr[a].info[x] < tr[b].info[x];});d[id[mid]] = x;ls[id[mid]] = build(l, mid - 1);rs[id[mid]] = build(mid + 1, r);maintain(id[mid]);return id[mid];}void print(int p) {if (!p) return;print(ls[p]);id[++idx] = p;print(rs[p]);}void rebuild(int &p) {idx = 0;print(p);p = build(1, idx);}bool bad(int p) {return alpha * siz[p] <= max(siz[ls[p]], siz[rs[p]]);}void insert(int &p, int cur) {if (!p) {p = cur;maintain(p);return;}if (tr[p].info[d[p]] > tr[cur].info[d[p]]) insert(ls[p], cur);else insert(rs[p], cur);maintain(p);if (bad(p)) rebuild(p);}void insert(vector<int> &a) {cur++;for (int i = 0; i < K; i++) {tr[cur].info[i] = a[i];}insert(rt, cur);}bool out(int p, vector<int> &a) {for (int i = 0; i < K; i++) {if (a[i] < tr[p].mn[i]) {return true;}}return false;}bool in(int p, vector<int> &a) {for (int i = 0; i < K; i++) {if (a[i] < tr[p].info[i]) {return false;}}return true;}bool all(int p, vector<int> &a) {for (int i = 0; i < K; i++) {if (a[i] < tr[p].mx[i]) {return false;}}return true;}void query(int p, vector<int> &a) {if (!p) return;if (out(p, a)) return;if (all(p, a)) {ans += siz[p];return;}if (in(p, a)) ans++;query(ls[p], a);query(rs[p], a);}int query(vector<int> &a) {ans = 0;query(rt, a);return ans;}
};

相关新闻

  • 小波矩阵树:高效静态区间第 K 大查询
  • 分数运算类
  • 坐标压缩与离散化

最新新闻

  • 2026银川2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 字节跳动拟购5万颗AI芯片,国产GPU竞争聚焦生态、成本与产能
  • 基于深度学习的糖尿病视网膜病变自动检测系统构建实战
  • Obsidian MCL布局:模块化CSS让你的笔记排版焕然一新
  • 逆向工程实战:从加密音乐文件到通用音频格式的转换原理
  • NGA论坛优化摸鱼体验:免费开源脚本让你的论坛浏览效率提升300%

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号