10 2023 档案

摘要:单调栈 引入 何为单调栈?顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。 为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例。 过程 插入 将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素。 例如, 阅读全文
posted @ 2023-10-31 15:09 tsqtsqtsq 阅读(20) 评论(0) 推荐(0)
摘要:单调队列 引入 如果一个选手比你小还比你强,你就可以退役了。 单调队列是一种主要用于解决滑动窗口类问题的数据结构,即,在长度为 \(n\) 的序列中,求每个长度为 \(m\) 的区间的区间最值。它的时间复杂度是 \(O(n)\),在这个问题中比 \(O(n\log ⁡n)\) 的 ST 表和线段树更 阅读全文
posted @ 2023-10-31 15:05 tsqtsqtsq 阅读(47) 评论(0) 推荐(0)
摘要:矩阵 引入 在数学中,矩阵是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由 \(19\) 世纪英国数学家凯利首先提出。 定义 由 \(m\times n\) 个数 \(a_{i,j}\) 排成的 \(m\) 行 \(n\) 列的数表称为 \(m\) 行 \ 阅读全文
posted @ 2023-10-30 20:12 tsqtsqtsq 阅读(122) 评论(0) 推荐(0)
摘要:欧拉函数与欧拉定理 欧拉函数 定义 欧拉函数,即 \(\varphi(n)\),表示的是小于等于 \(n\) 和 \(n\) 互质的数的个数。 比如说 \(\varphi(1) = 1\)。 当 n 是质数的时候,显然有 \(\varphi(n) = n - 1\)。 性质 欧拉函数是积性函数。 积 阅读全文
posted @ 2023-10-29 11:16 tsqtsqtsq 阅读(61) 评论(0) 推荐(0)
摘要:同余 定义 设整数 \(m\ne0\)。若 \(m\mid(a-b)\),称 \(m\) 为模数(模),\(a\) 同余于 \(b\) 模 \(m\),\(b\) 是 \(a\) 对模 \(m\) 的剩余。记作 \(a\equiv b\pmod m\)。 否则,\(a\) 不同余于 \(b\) 模 阅读全文
posted @ 2023-10-29 10:12 tsqtsqtsq 阅读(70) 评论(0) 推荐(0)
摘要:拓扑排序 引入 拓扑排序是一个有向无环图的所有顶点的线性序列。 该序列需要满足每个顶点出现且只出现一次和如果有一条 \(A\) 到 \(B\) 的路径,在序列中 \(A\) 出现在 \(B\) 的前面。 实现 拓扑排序的步骤: 计算每个点的入度。 入度为 \(0\) 就加入队列。 当队列不为空则循环 阅读全文
posted @ 2023-10-28 16:02 tsqtsqtsq 阅读(25) 评论(0) 推荐(0)
摘要:二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色点和一个白色点。换言之,二分 阅读全文
posted @ 2023-10-28 16:00 tsqtsqtsq 阅读(31) 评论(0) 推荐(0)
摘要:欧拉图 & 欧拉路 定义 图中经过所有边恰好一次的路径叫欧拉路径(也就是一笔画)。如果此路径的起点和终点相同,则称其为一条欧拉回路。 欧拉回路:通过图中每条边恰好一次的回路。 欧拉通路:通过图中每条边恰好一次的通路。 欧拉图:具有欧拉回路的图。 半欧拉图:具有欧拉通路但不具有欧拉回路的图。 性质 欧 阅读全文
posted @ 2023-10-28 15:59 tsqtsqtsq 阅读(289) 评论(0) 推荐(0)
摘要:一些语言技巧 其实有些东西个人平时根本用不到,然而不了解一下的话就看不懂大佬写的题解代码(鉴定为菜导致的 \(\texttt{qwq}\))。 类 类(class)是结构体的拓展,不仅能够拥有成员元素,还拥有成员函数。在面向对象编程(OOP)中,对象就是类的实例,也就是变量。 C++ 中 struc 阅读全文
posted @ 2023-10-28 10:00 tsqtsqtsq 阅读(28) 评论(0) 推荐(0)
摘要:最小生成树 引入 我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。 实现 求最小生成树的算法有 Prim 和 Kruskal 两种。这里我们主要讲解 Kruskal 算法(其实是 阅读全文
posted @ 2023-10-28 09:57 tsqtsqtsq 阅读(54) 评论(0) 推荐(0)
摘要:并查集 并查集被很多 \(\texttt{OIer}\) 认为是最简洁而优雅的数据结构之一,主要用于解决一些 元素分组 的问题。它管理一系列 不相交的集合,并支持两种操作: 合并:把两个不相交的集合合并为一个集合。 查询:查询两个元素是否在同一个集合中。 先来看看并查集最直接的一个应用场景:亲戚问题 阅读全文
posted @ 2023-10-28 07:58 tsqtsqtsq 阅读(64) 评论(0) 推荐(0)
摘要:概率期望 1 样本空间、随机事件 1.1 定义 一个随机现象中可能发生的不能再细分的结果被称为 样本点。所有样本点的集合称为 样本空间,通常用 \(\Omega\) 来表示。 一个 随机事件 是样本空间 \(\Omega\) 的子集,它由若干样本点构成,用大写字母 \(A, B, C, \cdots 阅读全文
posted @ 2023-10-26 20:46 tsqtsqtsq 阅读(109) 评论(0) 推荐(0)
摘要:tarjan 引入 Robert Tarjan,计算机科学家,以 LCA、强连通分量等算法而闻名。Tarjan 设计了求解的应用领域的广泛有效的算法和数据结构。他以在数据结构和图论上的开创性工作而闻名,他的一些著名的算法有 Tarjan 最近公共祖先离线算法,Tarjan 的强连通分量算法以及 Li 阅读全文
posted @ 2023-10-25 15:18 tsqtsqtsq 阅读(72) 评论(0) 推荐(0)
摘要:Splay 定义 Splay 树, 或 伸展树,是一种平衡二叉查找树,它通过 Splay/伸展操作 不断将某个节点旋转到根节点,使得整棵树仍然满足二叉查找树的性质,能够在均摊 $O(\log n)$ 时间内完成插入,查找和删除操作,并且保持平衡而不至于退化为链。 Splay 树由 Daniel Sl 阅读全文
posted @ 2023-10-20 21:02 tsqtsqtsq 阅读(72) 评论(0) 推荐(0)
摘要:最短路 Floyd 算法 是用来求任意两个结点之间的最短路的。 复杂度比较高,但是常数小,容易实现。(我会说只有三个 for 吗?) 适用于任何图,不管有向无向,边权正负,但是最短路必须存在。(不能有负环) 实现 我们定义一个数组 f[k][i][j],表示只允许经过结点 $1$ 到 $k$(也就是 阅读全文
posted @ 2023-10-19 16:16 tsqtsqtsq 阅读(54) 评论(0) 推荐(0)
摘要:引入 高斯消元法(Gauss–Jordan elimination)是求解线性方程组的经典算法,它在当代数学中有着重要的地位和价值,是线性代数课程教学的重要组成部分。高斯消元法除了用于线性方程组求解外,还可以用于行列式计算、求矩阵的逆,以及其他计算机和工程方面。 消元法及高斯消元法思想 定义 消元法 阅读全文
posted @ 2023-10-16 19:24 tsqtsqtsq 阅读(159) 评论(0) 推荐(0)
摘要:2-SAT 什么是 2-SAT? 首先,把「2」和「SAT」拆开。SAT 是 Satisfiability 的缩写,意为可满足性。即一串布尔变量,每个变量只能为真或假。要求对这些变量进行赋值,满足布尔方程。 举个例子:假设一群 $\texttt{OIer}$ 在同一个机房里(其实根本不用假设),其中 阅读全文
posted @ 2023-10-13 20:28 tsqtsqtsq 阅读(30) 评论(0) 推荐(0)
摘要:离散化 引入 离散化,就是当我们只关心数据的大小关系时,用排名代替原数据进行处理的一种预处理方法。离散化把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率,即:在不改变数据相对大小的条件下,对数据进行相应的缩小。本质上是一种哈希,它在保持原序列大小关系的前提下把其映射成正整数。当原数 阅读全文
posted @ 2023-10-13 19:15 tsqtsqtsq 阅读(108) 评论(0) 推荐(0)
摘要:双指针 引入 双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处。 顾名思义,双指针就是同时使用两个指针,在序列、链表结构上指向的是位置,在树、图结构中指向的是节点,通过或同向移动,或相向移动来维护、统计信息。 实现 首先来看一道题。 洛谷 P1 阅读全文
posted @ 2023-10-13 15:08 tsqtsqtsq 阅读(24) 评论(0) 推荐(0)
摘要:树状数组 引入 树状数组是一种支持 单点修改 和 区间查询 的,代码量小的数据结构。树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有;线段树有的操作,树状数组不一定有。但是树状数组的代码要比线段树短,思维更清晰,速度也更快,在解决一些单点修改的问题时,树状数组 阅读全文
posted @ 2023-10-12 19:36 tsqtsqtsq 阅读(42) 评论(0) 推荐(0)
摘要:fhq-Treap 无旋 Treap 的操作方式使得它天生支持维护序列、可持久化等特性。 无旋 Treap 又称分裂合并 Treap。它仅有两种核心操作,即为 分裂 与 合并。通过这两种操作,在很多情况下可以比旋转 Treap 更方便的实现别的操作。下面逐一介绍这两种操作。讲解无旋 Treap 应当 阅读全文
posted @ 2023-10-12 10:44 tsqtsqtsq 阅读(69) 评论(0) 推荐(0)
摘要:斯特林数 第二类斯特林数 为什么先介绍第二类斯特林数?因为第一类没学 虽然被称作「第二类」,第二类斯特林数却在斯特林的相关著作和具体数学中被首先描述,同时也比第一类斯特林数常用得多。 第二类斯特林数(斯特林子集数)$\begin{Bmatrix}n\\ k\end{Bmatrix}$,也可记做 $S 阅读全文
posted @ 2023-10-11 19:36 tsqtsqtsq 阅读(126) 评论(0) 推荐(0)
摘要:逆序对 引入 对于给定的一段正整数序列,逆序对就是序列中 $a_i>a_j$ 且 $i<j$ 的有序对。 —— 洛谷 P1908 逆序对 实现 首先贴出一道例题。 洛谷 P1908 逆序对 关于逆序对的定义:对于给定的一段正整数序列,逆序对就是序列中 $a_i>a_j$ 且 $i<j$ 的有序对。对 阅读全文
posted @ 2023-10-11 18:58 tsqtsqtsq 阅读(46) 评论(0) 推荐(0)
摘要:线段树 引入 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 \(O(\log ⁡n)\) 的区间修改,还可以同时支持多种操作(加、乘),更具通用性。 基础版实现 首先来看一道例题。 【模板】线段树 2 已知一 阅读全文
posted @ 2023-10-10 11:30 tsqtsqtsq 阅读(65) 评论(0) 推荐(0)
摘要:浅谈 STL (从 basic_algorithm贺的,只是为了复习而已) 为什么 C++ 比 C 更受人欢迎呢?除了 C++ 的编译令人感到更舒适,C++ 的标准模板库(STL)也占了很重要的原因。当你还在用手手写快排、手写二叉堆,挑了半天挑不出毛病的时候,C++ 党一手 STL 轻松 AC,想不 阅读全文
posted @ 2023-10-09 21:05 tsqtsqtsq 阅读(30) 评论(0) 推荐(0)
摘要:四边形不等式优化 DP 引入 首先来看一下区间 DP 的状态转移方程:$$ f(l,r)=\min\limits_{l\le k\le r}\left\{f(l,k)+f(k+1,r)\right\}+w(l,r) $$ 对于这样一个状态转移方程,通常来说我们的做法是: 枚举长度 $len$; 枚举 阅读全文
posted @ 2023-10-09 18:35 tsqtsqtsq 阅读(47) 评论(0) 推荐(0)
摘要:快速幂 定义 快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在 $O(\log n)$ 的时间内计算 $a^n$ 的小技巧,而暴力的计算需要 $O(n)$ 的时间。 这个技巧也常常用在非计算的场景,因为它可以应用在任何具有结合律的运算中。其中显然的是它可以应用于 阅读全文
posted @ 2023-10-05 20:46 tsqtsqtsq 阅读(72) 评论(0) 推荐(0)
摘要:状压 DP 引入 对于某一类问题,我们需要在动态规划的状态中记录一个集合。若集合中有不超过 $n$ 个元素且每一个元素都是小于 $k$ 的自然数,则我们可以将这个集合看作是一个 $n$ 位 $k$ 进制数,以一个 $[0,k^n-1]$ 之间的十进制整数的形式作为 DP 状态中的一维。这种把一个状态 阅读全文
posted @ 2023-10-05 19:40 tsqtsqtsq 阅读(39) 评论(0) 推荐(0)
摘要:随机数据生成与对拍 引入 本文介绍随机数据的生成方法与对拍测试方法。读者将学习使用随机数产生器,根据题目要求构造各种规模的输入数据,用于对自己编写的程序进行检测。同时,读者也将学习编写简单的脚本,自动化、批量化运行“数据生成程序”和两份不同的“问题求解程序”,并对两份程序的输出结果进行比对——我们把 阅读全文
posted @ 2023-10-04 20:42 tsqtsqtsq 阅读(139) 评论(0) 推荐(0)
摘要:斜率优化 引入 首先给出一种更加简单的优化。考虑一个这样的的式子:$$ f_i=\min\limits_{0\le j<i}\left\{f_j+g_j+h_i\right\} $$ 不难看出,这个式子中的每一项只会与 $i$,$j$ 中的一个有关。显然可以转化为:$$ f(i)=\min\limi 阅读全文
posted @ 2023-10-04 19:14 tsqtsqtsq 阅读(35) 评论(0) 推荐(0)
摘要:AC 自动机 引入 AC 自动机,顾名思义就是(能够帮你自动切题的机器)一种可以很方便地进行多模式串匹配的东西。 前置知识 Trie 树 KMP 实现 AC 自动机是以Trie 树的结构为基础,结合KMP的思想建立的。 简单来说,建立 AC 自动机主要有两个步骤: Trie 树的结构基础:将所有待匹 阅读全文
posted @ 2023-10-04 08:26 tsqtsqtsq 阅读(23) 评论(0) 推荐(0)
摘要:Catalan 数列 以下问题属于 Catalan 数列: 有 $2n$ 个人排成一行进入剧场。入场费 5 元。其中只有 $n$ 个人有一张 5 元钞票,另外 $n$ 人只有 10 元钞票,剧院无其它钞票,问有多少种方法使得只要有 10 元的人买票,售票处就有 5 元的钞票找零? 一位大城市的律师在 阅读全文
posted @ 2023-10-02 19:44 tsqtsqtsq 阅读(79) 评论(0) 推荐(0)
摘要:哈希 引入 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。所谓以「key-value」形式存储数据,是指任意的键值 key 都唯一对应到内存中的某个位置。只需要输入查找的键值,就可以快速地找到其对应的 value。可以把哈希表理解为一种高级的数组,这种数组的下标可以是很大的整 阅读全文
posted @ 2023-10-02 19:28 tsqtsqtsq 阅读(56) 评论(0) 推荐(0)