随笔分类 - 数据结构
摘要:并查集介绍 并查集是一种树形的数据结构,我们可以使用它来进行集合上的合并与查询等问题。具体来说,它支持两种操作: 合并:将两个集合合并成一个集合。 查询:确定某个元素处于哪个集合。 如图,\(\{3, 1, 2, 4, 0, 10\}\) 表示一个集合,\(\{5, 7, 8, 11\}\) 表示另
阅读全文
摘要:线段树介绍 线段树是一种基于分治思想的二叉树结构,用于在区间上进行高效的信息统计。 如图是一般的线段树结构,我们可以发现: 线段树的每个节点都代表一个区间,且按照深度递增,代表的区间逐渐缩小。 线段树是单独的一棵树,具有唯一的根节点,它代表需要统计信息的整个区间。 线段树的每个叶子节点都代表一个长度
阅读全文
摘要:Skyline Photo 题意 有 \(n\) 座建筑排成一排,每座建筑都有 \(h_i\) 高度和 \(b_i\) 美丽度。现在把它们划分成几个连续的区间,每个区间的美丽度为这个区间最矮的建筑的美丽度,问所有区间的美丽度总和最大为多少。 \(1 \le n \le 3 \times 10^5,
阅读全文
摘要:双端队列 题意 给出长度为 \(n\) 的序列,从 \(1 \sim n\) 依次处理这 \(n\) 个数字,有两种操作: 新建一个双端队列,将当前这个数字放进去。 将当前数字放进已有的双端队列中。 问最少需要几个双端队列,可以使得把这若干个双端队列拼接在一起形成非降序序列? 分析 如果要拼接双端队
阅读全文
摘要:直方图的最大面积 题意 直方图是由在公共基线处对齐的一系列矩形组成的多边形。 矩形具有相同的宽度,但可以有不同的高度。 例如,下图显示了高度为 \(2, 1, 4, 5, 1, 3, 3\) 的矩形组成的直方图。 请问直方图上最大的对齐矩阵面积为多少? 分析 首先可以发现最大的对齐矩阵的高度,一定是
阅读全文
摘要:对顶堆 什么是对顶堆 对顶堆是一种数据结构,它可以动态地维护某一个临界值,如前 \(i\) 个数字的中位数、 前 \(i\) 个数字中第 \(k\) 小的值等。 对顶堆一般适用一个大根堆维护前面某个状态,小根堆维护后面不同的状态(如大于/小于中位数等)。 我们只需要调整两个堆的元素数量,即可 \(O
阅读全文
摘要:并查集拓展域 并查集是用来维护元素之间的制约关系,并且在更新时可以传递关系的一种数据结构,但有时候只靠是否在集合内不足以表示复杂的关系,因此引入了拓展域的关系. 例题 食物链 1. 带权并查集 #include <iostream> #include <numeric> #include <func
阅读全文
摘要:Xor on Segment 题意 给出 \(n\) 个数字的序列 \(a\) 。进行 \(m\) 次操作,操作有两种: 求 $\displaystyle \sum_{i=l}^{r} a_i$ 。 把区间 \([l, r]\) 上的每个数字异或 \(x\) 。 其中 \(1 \le n \le
阅读全文
摘要:TorCoder 题意 给出一个长度为 \(n\) 的字符串 \(s\) ,有 \(m\) 次询问,每次给出 \(l_i, r_i\) ,将 \([l_i, r_i]\) 的子串交换顺序使其成为字典序最小的回文子串,如果不能就跳过这次询问,求 \(m\) 次询问后,字符串 \(s\) 的字面值。 分
阅读全文

浙公网安备 33010602011771号