摘要:
李超发明的一种维护平面上有限值域的直线或线段纵坐标大小的一种数据结构。 因为是根据线段树研发的,代码也基于线段树,所以叫李超线段树。 常规支持: 插入一条线段或直线。 查询单点最大的直线或线段上的纵坐标 查询通俗一点讲就是:给一堆直线和线段,求从一个横坐标的正无穷高往下做一条直线与给定的一堆直线和线 阅读全文
摘要:
反正就是利用重链剖分:一个点到根最多只会经过 $\log N$ 条轻边。然后就对于一个点,求其子树内的一些东西,要记录这个子树内所有节点的某些信息——这个点的重儿子递归下去不清空信息,轻儿子递归下去清空信息,然后对于这个节点又把轻儿子及它们的子树内节点记录一遍,再计算这个点的贡献。 比如例题 CF7 阅读全文
摘要:
解决树上的很多问题。比如子树操作,链操作等等,但是不能处理动态问题(处理动态树问题大都要用 LCT)。 树链剖分同可持久化线段树一样,只是一个工具,难点都在维护的东西上。像什么树上 DDP,就是用树链剖分维护,难点全在列矩阵上。(用完全平衡二叉树可以更快,但没必要) 树链剖分就是利用了重链剖分剖出来 阅读全文
摘要:
更新:能过模板题(和加强版)的代码: 普通平衡树: (请自行实现读入和输出函数) 点击查看代码 #include <iostream> #include <random> #include <time.h> const int MAXN=1e6+50; std::mt19937 Rand(time( 阅读全文
摘要:
可持久化线段树1 考虑不会变得太多,每次该值操作只会改变一个位置的值,其它位置是可以继承的。如果用数组,那就是下标继承。如果把数组分成 $2$ 半,那改一个值,就一半继承,另一半重新赋值。而用线段树,就可以做到区间继承 $\log$ 的时间复杂度。 所以就是:当前区间分成 $2$ 半,一半直接继承原 阅读全文
摘要:
Kruskal 重构树 是一棵二叉树,一张 $N$ 个点的无向连通图的 Kruskal 重构树有 $2N-1$ 个节点。 叶子节点为原图中节点,非叶子节点有点权,表示想在原图上从一边的子树内的叶子节点所对应的原图上节点走到另一边的子树内的叶子节点所对应的原图上节点所需经过的最长边的最小可能值。 建树 阅读全文
摘要:
2022/8/12日过了,代码如下:(已删除调试语句,保留注释,为了使代码更容易看懂并没有卡常。卡完常的代码不是给人看的) 点击查看代码 /* 倒序操作+合并连通块+维护集合,支持合并、区间查询+线段树合并 */ #include<bits/stdc++.h> using namespace std 阅读全文
摘要:
杭电多校第二场 DOS Card 评价一下这道题:我写过最爽的线段树题。 这道题真的非常令人身心愉悦,非常厉害的一道线段树入门题。我写这个一次调试都没有,过了样例就交了就过了,一切都是行云流水。 这道题的代码非常好看,也非常好写。 题面: 对序列 $a$,回答 $q$ 次询问: 给定长度至少为 $4 阅读全文
摘要:
ARC 144 比赛情况:一眼订正,鉴定为做起 $3$ 道题。 A - Digit Sum of 2x $2x$ 进位就不满足 $M$ 最大的条件了,所以 $x$ 不能进位。 然后要求 $x$ 最小,只要 $N%4\neq 0$ 则最高位为 $N% 4$,否则最高位为 $4$。后面只能全填 $4$ 阅读全文