随笔分类 -  数据结构

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