随笔分类 - 学习笔记 / 数据结构
摘要:写在前面 一个博主很早之前学的算法,只记录了自己的模板没写总结,导致在一场考试中,遇到原题但只能含泪写暴力,所以先趁热打铁来写一个博客。 简介 李超线段树,可能才是真正的线段树,因为它真的在记录线段。 用途是来解决一些插入直线/线段,支持查询单点极值的问题。 前置知识 线段树(不会就不用学了)和标记
阅读全文
摘要:点分治 点分治,可能是一种针对可带权树上简单路径统计问题的算法。(也可能是因为博主理解的浅薄) 是分治思想在线段树上的体现。每次找树上的重心来计算跨过重心的答案就像序列分治每次统计跨过分治中心的答案。 前置知识 dfs,找重心以及树上的一些处理方法。 重心 重心就和我们的分治重心一样直接影响时间复杂
阅读全文
摘要:前置知识 可持久化线段树 本质上只是可持久化数组 按秩合并 因为正常写并查集的路径压缩时间复杂度是均摊保证的,所以可以构造数据使可持久化后复杂度爆炸。 所以将并查集按秩合并,保证树长始终为 \(\log n\) 级别的。 只需要记录一下每个点的子树的深度,将小的合并到大的上。 void merge(
阅读全文
摘要:算法 算法应用 主要用于精准覆盖问题,通过一点简单的改变就可以直接求重复覆盖问题。 算法流程 对于当前的矩阵,选择一行,将这一行和不能与这条边一起选的边上的所有点删掉。(不能一起选就是在同一列有点) 如果删掉后所有列都被删完了,就结束。 如果这时候还有列没被删,但没有行可以选了就说明不合法,开始回溯
阅读全文
摘要:前置知识 树状数组(不会就学一下再来) 简介 因为树状数组可以非常简洁解决序列上的一些问题,所以考虑能否用树状数组解决矩阵(二维序列)的问题。 比较暴力的想法是对于每一横行建一个树状数组,再对每一列建一个树状数组统计答案。 但这样显然要\(n+m\)个树状数组,但是我们发现这些树状数组复用了一些节点
阅读全文
摘要:题目链接 简要题意 给定一个有 \(n\) 个结点的树,树有点权且点权为正整数。现选取 \(k\) 条从根结点出发到叶子结点的简单路径,求这些路径的并集上所有结点的点权之和的最大值。 主要算法 贪心,树链剖分,(线段树合并) 思路 一个显然的贪心,每次选一点点权和最大的链,再讲这条链清为0。正确性我
阅读全文
摘要:题目链接 简要题意: 给定一个长度为 \(n\) 的数组 \(A\),你需要完成以下 \(q\) 次操作。 1 l r x 将 \(A_i(l\le i\le r)\) 异或上 \(x\)。 2 l r 求: \[(\sum_{i=l}^r\bigcup_{j=l}^i A_j) \bmod 2^{
阅读全文
摘要:简介 什么是左偏树? 上面的树都是左偏树。 先引出一个概念,dis等于节点到它子树里面最近的叶子节点的距离,特别地叶子节点的dis等于0。 观察上图我们可以感性理解左偏树,就是左子树的深度大于等于右子树,看上去整个树向左偏。 再看一眼就可以总结出几条性质: 1.左儿子的\(dis\)<=右儿子的\(
阅读全文

浙公网安备 33010602011771号