随笔分类 - 笔记
摘要:F. Frances Yao 女士的原论文 参考博客 前言 感谢果果让我知道了在没完全看懂一个东西之前不能乱过题。 戒掉狂妄,戒掉浮躁。清楚目标,不要被冲昏头脑。 今天可能写不完,能写多少写多少。 四边形不等式优化的实现 之所以把实现放到前面来,是因为实现是比证明简单得多的。 应用场景 对于某些区间
阅读全文
摘要:向量的定义 只有大小而没有方向的量称作 标量 。 既有大小又有方向的量称作 向量(Vector) 。 别和 std::vector<> 搞混了,此 vector 非彼 vector。 向量的表示 二维向量可在平面直角坐标系上表示,此时它的长度称为 模长 。 由于向量没有位置,我们可以直接将它的起点平
阅读全文
摘要:原来学习的关于最长公共子序列的解法,要不是朴素 dp $O(n ^ 2)$ ,要不是基于二分的 $O(n \log n)$ 算法。后者虽然时间复杂度优,但是局限性很大,无法在同时做一些附加的转移。 这里提供一种基于树状数组的 $n \log n$ 解法,实现原理与朴素 dp 相同。 实现原理 树状数
阅读全文
摘要:0xFF 前言 听到基科班考试提前半年人心态都要崩了。 关键是要讲数学,我数学几乎为空白。 所以来补补概念。 01. 质数与合数 1.1 定义 大于 1 且 约数只有 1 和它本身的数 称为质数(素数)。 其他 大于 1 的数称作合数。 两数互质,当且仅当 两数没有除 1 以外的公共因数 。 性质:
阅读全文
摘要:前言 我是傻逼。 普通的差分很简单,记录相邻两个元素的差值。 当需要还原修改后的数组时,我们只需要把每个数之间的差值挨个累加。 也就是跑一遍前缀和。 即前缀和是差分的逆运算。 边差分 当我们需要为树上的一条路径上的点或边统一加权值时,就会用到树上差分。 其原理和普通差分一样。 修改 在边差分中,一条
阅读全文
摘要:普通莫队 如何求在某个区间内,有多少种不同的数字,每个数字总共出现了多少次? 可以开个桶,对于每个区间暴力求解。 但是如果有很多组询问呢? 显然有更优的算法,可以将一个询问的状态转移到另一个询问的状态。 这就是莫队算法。 实现过程:两个指针 l 和 r ,随着询问的范围在数组上移动。移动时顺便记录增
阅读全文
摘要:分块——优雅的暴力。 分块永远是偏解。 ——@ny_fzx 但是,在面对一些区间问题的时候,不涉及SegTree、LCT等高级数据结构,编码简单的分块能拿到相当可观的分数。 根号分块 顾名思义,这是把长度为 $n$ 的数组分成 $\sqrt{n}$ 个区间。 核心思想:对于一个区间,将其不包含在整块
阅读全文
摘要:前置知识: $C_m^n = \frac{n!}{m!(n - m) !} = C_m^n=C_ {m-1}^n+C_ {m-1}^ {n-1}$ void getC() { for (int i = 0; i <= m; i++) c[i][i] = 1; for (int i = 0; i <=
阅读全文
摘要:蒟蒻的数据结构学习笔记 01 Introduction 它是什么? 树状数组是一种支持单点修改和区间查询的数据结构。 它长什么样?它用普通数组实现,数组长度与原数组相同。 它的效率如何? 它的修改时间复杂度是 $O(\log n)$,区间查询时间复杂度也为 $O(\log n)$。 后文记树状数组为
阅读全文