摘要: 在我的心里 NOI 大纲内提高级最难的知识点是圆方树、平衡树和笛卡尔树,平衡树自从自学了 DHQ-treap 后倒是有所改观,今天又重学笛卡尔树,发现貌似并不是那么难(原理上)。看来是我第一次听的时候重视代码而忽略原理了…… 笛卡尔树可以定义为:一棵每个节点有 2 个值的二叉树,第一个值为 inde 阅读全文
posted @ 2022-10-07 19:16 0htoAi 阅读(80) 评论(0) 推荐(1) 编辑
摘要: 以前没学过,以为是个很难的算法(不然也不会这么快)。 然后今天要用到,就学了一下。最开始没看懂网上的题解,就自己琢磨了一下,然后有点理解了。 桶排序(在 OI-wiki 上称作计数排序,桶排序是另一种)的原理是开一个大小为值域的数组,把需要排序的数字都放在其值在桶里对应的下标处(可以用 vector 阅读全文
posted @ 2022-10-05 18:55 0htoAi 阅读(49) 评论(1) 推荐(1) 编辑
摘要: 李超发明的一种维护平面上有限值域的直线或线段纵坐标大小的一种数据结构。 因为是根据线段树研发的,代码也基于线段树,所以叫李超线段树。 常规支持: 插入一条线段或直线。 查询单点最大的直线或线段上的纵坐标 查询通俗一点讲就是:给一堆直线和线段,求从一个横坐标的正无穷高往下做一条直线与给定的一堆直线和线 阅读全文
posted @ 2022-10-04 19:01 0htoAi 阅读(92) 评论(0) 推荐(1) 编辑
摘要: 反正就是利用重链剖分:一个点到根最多只会经过 $\log N$ 条轻边。然后就对于一个点,求其子树内的一些东西,要记录这个子树内所有节点的某些信息——这个点的重儿子递归下去不清空信息,轻儿子递归下去清空信息,然后对于这个节点又把轻儿子及它们的子树内节点记录一遍,再计算这个点的贡献。 比如例题 CF7 阅读全文
posted @ 2022-09-29 21:17 0htoAi 阅读(36) 评论(1) 推荐(0) 编辑
摘要: 解决树上的很多问题。比如子树操作,链操作等等,但是不能处理动态问题(处理动态树问题大都要用 LCT)。 树链剖分同可持久化线段树一样,只是一个工具,难点都在维护的东西上。像什么树上 DDP,就是用树链剖分维护,难点全在列矩阵上。(用完全平衡二叉树可以更快,但没必要) 树链剖分就是利用了重链剖分剖出来 阅读全文
posted @ 2022-09-18 20:58 0htoAi 阅读(41) 评论(1) 推荐(1) 编辑
摘要: 更新:能过模板题(和加强版)的代码: 普通平衡树: (请自行实现读入和输出函数) 点击查看代码 #include <iostream> #include <random> #include <time.h> const int MAXN=1e6+50; std::mt19937 Rand(time( 阅读全文
posted @ 2022-09-13 22:02 0htoAi 阅读(31) 评论(0) 推荐(1) 编辑
摘要: 可持久化线段树1 考虑不会变得太多,每次该值操作只会改变一个位置的值,其它位置是可以继承的。如果用数组,那就是下标继承。如果把数组分成 $2$ 半,那改一个值,就一半继承,另一半重新赋值。而用线段树,就可以做到区间继承 $\log$ 的时间复杂度。 所以就是:当前区间分成 $2$ 半,一半直接继承原 阅读全文
posted @ 2022-09-06 21:49 0htoAi 阅读(28) 评论(1) 推荐(1) 编辑
摘要: 大户爱 阅读全文
posted @ 2022-09-01 09:47 0htoAi 阅读(7) 评论(1) 推荐(1) 编辑
摘要: Kruskal 重构树 是一棵二叉树,一张 $N$ 个点的无向连通图的 Kruskal 重构树有 $2N-1$ 个节点。 叶子节点为原图中节点,非叶子节点有点权,表示想在原图上从一边的子树内的叶子节点所对应的原图上节点走到另一边的子树内的叶子节点所对应的原图上节点所需经过的最长边的最小可能值。 建树 阅读全文
posted @ 2022-08-27 05:52 0htoAi 阅读(98) 评论(2) 推荐(0) 编辑
摘要: 2022/8/12日过了,代码如下:(已删除调试语句,保留注释,为了使代码更容易看懂并没有卡常。卡完常的代码不是给人看的) 点击查看代码 /* 倒序操作+合并连通块+维护集合,支持合并、区间查询+线段树合并 */ #include<bits/stdc++.h> using namespace std 阅读全文
posted @ 2022-08-11 20:10 0htoAi 阅读(48) 评论(2) 推荐(1) 编辑