news 2026/5/1 11:37:35

树上倍增|st表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树上倍增|st表

lc1483

ST表的本质就是二进制拆分,只要满足传递性,可加性即可,和线段树,树状数组,二分查找的底层数学模型是一致的

不得不说,这种记录2^j父节点的想法太巧妙了,第一次见,觉得惊艳。 blow my mind 的感觉,极具美感的算法让人如受洗礼一样,佩服第一次想出这种算法的大佬。

5. 类似的思想在很多算法里都有体现.

6. 树的高度如果是N怎么办,比如退化成链表

7. 代码没变化,复杂度分析没变化。文字确实有个小错误:树的最大的高度是 n 级别的,所以人一个节点到距离为 1, 2, 4, 8, 16, 32 ... 的祖先,最多存储到 logn 这么多祖先的距离,所以状态总数是 nlogn 的。

8. 我一直以为叫ST表

9. st 也用到了 binary lifting 的思想,但 st 不是 binary lifting,st 是指创建一个表快速求查询一个数组的最大值,最小值,和或者其他统计数据。可以参考这里:https://cp-algorithms.com/data_structures/sparse-table.html

class TreeAncestor {

private:

vector<vector<int>> dp;

public:

TreeAncestor(int n, vector<int>& parent) : dp(n) {

for(int i = 0; i < n; i ++)

dp[i].push_back(parent[i]);

for(int j = 1; ; j ++){

bool allneg = true;

for(int i = 0; i < n; i ++){

int t = dp[i][j - 1] != -1 ? dp[dp[i][j - 1]][j - 1] : -1;

dp[i].push_back(t);

if(t != -1) allneg = false;

}

if(allneg) break; // 所有的节点的 2^j 的祖先都是 -1 了,就不用再计算了

}

}

int getKthAncestor(int node, int k) {

if(k == 0 || node== -1) return node;

int pos = ffs(k) - 1; // C++ 语言中 ffs(k) 求解出 k 的最右侧第一个 1 的位置(1-based)

return pos < dp[node].size() ? getKthAncestor(dp[node][pos], k - (1 << pos)) : -1;

}

};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:48:05

Wi-Fi SAE

从医疗设备下位机软件开发的角度来看&#xff0c;Wi-Fi SAE可以被理解为一套为无线网络接入设计的、更先进的“身份核实与密钥协商”流程。1. 它是什么&#xff1f;Wi-Fi SAE的全称是“Simultaneous Authentication of Equals”&#xff08;对等实体同时认证&#xff09;。它是…

作者头像 李华
网站建设 2026/5/1 3:48:27

FDA GMP

FDA GMP&#xff08;美国食品药品监督管理局药品生产质量管理规范&#xff09;是确保药品、也包括医疗设备的生产过程稳定可靠的一套强制性规则体系。从医疗设备软件开发的视角看&#xff0c;它可以理解为保障产品最终安全有效的“生产操作系统”。 下面的表格对这五个方面进行…

作者头像 李华
网站建设 2026/5/1 3:52:17

飞牛fnOS高危漏洞? Cloudflare 给飞牛 NAS 套了层“免费 WAF 盾”

最近&#xff0c;国产NAS系统飞牛被爆出严重安全漏洞&#xff0c;路径穿越跳过权限验证&#xff0c;直接访问系统内部资料&#xff0c;一度冲上知乎热榜 不少用户都在担忧数据安全&#xff0c;今天一篇教程教你拯救自己的NAS。 你以为开了 IPv6 就能愉快外网访问 NAS&#x…

作者头像 李华
网站建设 2026/5/1 3:49:47

名字空间(namespace)

最初C标准中并没有名字空间&#xff0c;要求程序中全局作用域中声明的变量、函数、类型等必须具有唯一的名字如果在同一个程序中有两个名字相同的全局变量将产生命名冲突&#xff08;和C语言一样&#xff09;如果程序中引入第三方库就必须保证程序中定义的全局名都不能与所用库…

作者头像 李华
网站建设 2026/5/1 3:51:49

AI写论文的秘籍!4款AI论文生成工具,让期刊论文写作更轻松!

在2025年的学术写作智能化浪潮中&#xff0c;越来越多的人选择使用AI论文写作工具。当我们谈及硕士或博士论文等较长的学术作品时&#xff0c;许多工具常常存在理论深度不足和逻辑不够严谨的问题。因此&#xff0c;普通的AI写论文的工具远不能满足专业论文写作的需求。尤其是在…

作者头像 李华