合集-算法
摘要:CDQ分治 对比普通分治 把一种问题划分成不同子问题, 递归处理子问题内部的答案, 再考虑合并子问题的答案。 再看CDQ分治 有广泛的应用, 但我不会。 但在接下来的题目体会到大概: 将可能产生的对于答案的贡献分为两类: \(f(l, mid)\) 与 \(f(mid + 1, r)\) 内部产生的
阅读全文
摘要:分块 理解 优雅暴力, 对序列进行划分, 进行一些预处理, 总而减少时间复杂度, 有技术含量的是通过列式子, 再通过数学方法或者其他奇奇怪怪的方法, 求出合适的块长。 直接上题目 教主的魔法 题解 块长定为 $ \sqrt n $ , 针对每一块内部进行排序。 对于修改操作, 整块就直接维护一个增量
阅读全文
摘要:莫队算法 莫队算法是由莫涛发明的离线算法, 有很多应用 , 实现起来也较为简单, 可以称作优雅的暴力, 大部分情况是将所有询问离线下来,通过合理的排序, 然后进行 \(O(1)\) 的转移, 由于是通过分块排序和 \(O(1)\) 转移, 所以看起来既暴力又透出一丝优雅。 普通莫队 直接上题吧 P1
阅读全文
摘要:FHQ平衡树 FHQ平衡树是一棵treap, 考虑treap都有的性质。 treap 是一棵笛卡尔树, 同时具有堆的性质, 和BST的性质, 并且每个节点权值不同的 treap 的形态是固定的。 treap的堆权值(\(pri\))完全随机时, treap的树高期望为 \(O(logn)\)。
阅读全文
摘要:数学 1.斐波那契数列: $ f(i) * f(i + 3) - f(i + 1) * f(i + 2) = (-1)^{i-1} $
阅读全文
摘要:数论 lucas定理 \({n \choose m} \mod p = {n / p \choose m/p} * {n \mod p \choose m \mod p}\) 数论分块 数论分块可以快速计算一些含有除法向下取整的和式(即形如 \(\sum_{i=1}^nf(i)g(\left\lfl
阅读全文
摘要:简述 全局第k小 线段树二分 树状数组倍增 区间第k小 主席树 划分数
阅读全文
摘要:dfs序 定义 dfs序是指:每个节点在dfs深度优先遍历中的进出栈的时间序列。 序列 树上路径 任意子树都是连续的。例如假设有个子树\(BEFK\),在序列中对应的部分是:\(BEEFKKFB\);子树 \(CGHI\) ,在序列中对应的部分是:\(CGGHHIIC\) 。 任意点对 \((a,b
阅读全文
摘要:历史版本和线段树 功能 可以累计所有历史版本的答案, 可以解区间子区间问题 算法 先上题目: Good Subsegments 题意: 求解 \((l, r)\) 区间里“好的”子区间个数。 “好的”定义为区间内元素排序后是连续的。 思路: 考虑没有重复的数, 所以当一个区间是“好的”相当于\(ma
阅读全文
摘要:左偏树 定义: 左偏树是一个堆, 具有堆的性质, 并且是左偏的 如果一个点只有左儿子或右儿子, 那么就称它为外节点, 定义一个结点的 \(dist\) 等于这个点到最近外节点的距离加 \(1\) 。特殊的, 外节点 \(dist\) 等于 \(1\) 。 左偏性质: 每个节点的左儿子 \(dist\
阅读全文
摘要:同余最短路 是一种通过同余把状态分类, 再通过建图跑最短路解决问题的算法。可以高效率解决一些特定的问题。 非常的奇妙。 算法 鉴于学不懂, 所以直接搬 \(oi-wiki\) 的题吧。 呜呜呜。 P3403 跳楼机 有一栋高为 \(h\) 的楼, 初始在一楼, 每次可以向上移动 \(x\), \(y
阅读全文
摘要:区间最值操作, 历史最值问题 来源 吉老师2016集训队论文, oiwiki, 网络上各种博客。 概述 区间最值操作指的是: 将所有的$i \in $ \((l, r)\), \(a_i = min或max(a_i, k)\)。 历史最值问题指的是: 新定义一个数组 \(b[]\), \(b[i]
阅读全文
摘要:Splay树 Splay树又名伸展树, 是tarjan为LCT而发明的平衡树, 通过旋转操作维护二叉搜索树的高度平衡, 其实不管时间复杂度的证明, Splay树挺简单的。 均摊复杂度 \(O(logn)\)(需要用到势能分析), 可以区间操作, 不能可持久化, 常数较大(大于FHQtreap), 但
阅读全文
摘要:Link Cut Tree 简称LCT(不是Li Chao Tree), 是一种非常强大的数据结构。 声明 该博客写来很大部分目的是帮助自己理解, 笔者水平有限, 没办法完全原创, 有很多内容源自于OI-wiki,和网上博客, 见谅。 功能 考虑一些问题: 树上单点查, 树上路径修改, 这是树上差分
阅读全文
摘要:珂朵莉树 这个名字我猜是来源于初次诞生这个算法的题目->Willem, Chtholly and Seniorious 算法 适用于数据随机, 并且有区间推平操作, 也就是区间赋值操作, 就可以用set维护, 达到优秀的 \(O(nlogn)\) 时间复杂度。 定义 struct Node{ int
阅读全文
摘要:网络流 主要分为以下三大问题: 网络最大流问题 网络最小割问题 最小费用最大流问题 现在考得更难的还有模拟网络流, 运用网络流思想, 来解决一些神秘问题。 算法 接下来我会讲解一些通过找增广路找最大流的算法, 也就是Dinic和EK算法。 最大流最小割定理 最大流最小割定理: 对于任意网络 \(G
阅读全文
摘要:数论分块 大部分内容来源于OI-WIKI 引理1: \(\\forall a,b,c\in\mathbb{Z},\left\lfloor\frac{a}{bc}\right\rfloor=\left\lfloor\frac{\left\lfloor\frac{a}{b}\right\rfloor}{
阅读全文
摘要:莫比乌斯反演 大部分内容摘自OI-WIKI 前置知识 数论分块 数论分块 狄利克雷卷积 \(\large h(x)=\sum_{d\mid x}{f(d)g\left(\dfrac xd \right)}=\sum_{ab=x}{f(a)g(b)}\) 积性函数 若函数 \(f(n)\) 满足 \(
阅读全文
摘要:杜教筛 参考来源: OI-Wiki, 网上博客 线性筛可以在线性时间求积性函数前缀和, 而杜教筛可以用低于线性时间求解积性函数前缀和。 我们考虑 \(S(n)\) 就是积性函数的前缀和, 所以我们尝试构造关于 \(\large S(n)\) 关于 \(\large S(\lfloor \frac{n
阅读全文
摘要:筛法 埃氏筛 考虑埃氏筛是通过把每个质数的倍数都标记为合数, 这样剩下的数就都是质数。 时间复杂度 \(O(nloglogn)\) bitset<10000000> p; void Eratosthenes(int n) { for(int i = 2; i <= n; i++) { if(!p[i
阅读全文
摘要:lxl DS Day 1 莫队本质 子树补的回滚莫队 O(nlogn) P7124 [Ynoi2008] stcm 性质1: 考虑轻儿子的子树和为 \(O(nlogn)\)。 证明: 考虑每个结点会对多少个轻祖先做贡献, 也就是重链个数, 考虑每个节点到根节点重链条数为 \(O(nlogn)\) ,
阅读全文
摘要:单侧递归类问题 单侧递归 线段树套可持久化平衡树
阅读全文
摘要:区间最值操作 CF1572F 首先广播站 \(i\), 能覆盖到的肯定是相对于 \(i\) 的前缀, 我们可以维护一个 \(r_i\), 表示每个 \(i\) 可以覆盖到的右端点, 考虑每次一操作,就是把 \(r_x\) 改为 \(g\), 然后 \(x - 1\) 以前的 \(r_i\) 就不能跨
阅读全文
摘要:多项式笔记 本文为阅读 OI-Wiki 书籍 学长slide 网上博客的笔记 多项式一般用来对一些函数的计算加速。 前置知识 多项式插值 \(n + 1\) 个横坐标互不相同的点可以唯一确定一个 \(n\) 次多项式。 复数 复数运算 已知 \(i^2 = -1\), 那么复数加减乘除全部就可以自己
阅读全文
摘要:插头DP 前言 今天学长讲了插头DP, 以前觉得他的模板就是黑题, 一定非常的难, 但是学习了之后发现它其实挺好理解, 但是难度该黑。 鉴于水品有限, 只简短的说一说, 给自己梳理一下思路。 算法 我们从模板题的弱化版开始讲: P5074 Eat the Trees 我们发现要是闭合回路, 这只能老
阅读全文
摘要:DP选讲 P5074 Eat the Trees 最简单的插头DP, 轮廓线和插头可以很轻松存储状态和转移。 P4719 【模板】"动态 DP"&动态树分治 P5024 [NOIP2018 提高组] 保卫王国 动态DP一般就是简单的DP带单点修改, 而且给你放到树上, 这样你就不得不写树剖, 写树剖
阅读全文
摘要:拓展摩尔投票 前言 了解到这个东西是从 CF840D 来的,我觉得这个题很典很套路,并且做法很多也很妙,并且我断定这种出现次数占比超过一个值的题一定有一种通法,于是在题解区了解到了拓展摩尔投票。 算法 考虑是摩尔投票的拓展,也就是我们可以在 \(O(nk)\) 的时间内得到 \(k - 1\) 个数
阅读全文
摘要:图论 参考 oiwiki 网上博客 树 LCA 性质 \(LCA(A \cup B) = LCA(LCA(A), LCA(B))\) 一堆点集的LCA 等于其中 dfn 最大的和最小的点的 LCA dfs序求lca 好写且 \(O(1)\),吊打欧拉序和倍增。 如果两个点 \(x\) 和 \(y\)
阅读全文