随笔分类 - 数据结构
摘要:并查集(正经 并查集是一种支持动态 link 的,能够快速判断两元素是否处于同一集合的数据结构。 (如果需要 cut,请出门右转 LCT) 那么其基本操作就包括: 连边。在两个点之间连一条边,使得两个点所在的两个集合合并为一个集合。 查询。查询两个点是否处在同一个集合中。 这也是普通并查集的所有操作
阅读全文
摘要:重链剖分 Link-Cut Tree 回顾重链剖分,可以发现,它维护的是一棵静态的树。 当题目是森林时,尤其是有连边、断边等操作时,重链剖分不好维护。 所以,需要一种更为灵活的算法,也就是 LCT。 重链剖分是用的线段树维护原树。之前提到过,区间树除了用线段树可以实现,Splay 也是可以的。所以
阅读全文
摘要:替罪羊树 简述 替罪羊树是一种体现代码暴力美学的数据结构。 虽然暴力,但它不是像分块、莫队那样的根号算法,它是一种 算法。 多了解几个平衡树,会发现每棵树都有自己的特点,比如: Treap 是 BST 与堆的结合体; Splay 特有的伸展到根; Fhq_Treap 类似于拼图; 红黑
阅读全文
摘要:平衡树 很久以前,我立志要学习所有的平衡树,然后把每个树的学习笔记都整理到相关博客中。 而如今…… 今年欢笑复明年,不知退役在眼前。 在阅读本文之前建议先学习二叉搜索树相关内容。 相关题单。 Fhq_Treap 原来 Treap 是一种旋转类的平衡树(即树堆),然后由~~防火墙~~范浩强神犇发明了一
阅读全文
摘要:字典树-Trie 字典树,顾名思义,就是一个像字典一样的树。 —— OI-wiki 普通 Trie 如图: Trie 用边代表字母,那么从根节点到某个节点的路径表示一个字符串。 Trie 支持的操作有三个: 插入字符串 查询字符串是否存在 删除字符串 最常用的是前两个(比如模板)。 Trie 的储存
阅读全文
摘要:优化建图 树套树 显然啊,树套树有很多种。 可以线段树套平衡树,平衡树套线段树,线段树套线段树,树状数组套主席树等等。 1. 线段树套平衡树 最经典的树套树,还得是模板题。 前置知识:Fhq_Treap 如果全局维护什么排名、k 小值,前驱后继什么的,单是平衡树就可以解决了。 不过,这里有区间。 对
阅读全文
摘要:可持久化 线段树优化建图 两道相对模板的例题,都是线段树优化建图之后跑最短路。 CF786B P6348 分几种情况: 点向点连边 点向区间连边 区间向点连边 区间向区间连边 建树 显然,如果直接建图,每次能建立 数量级的边,总边数大概是 (因为重边会多次计算),空间复
阅读全文
摘要:线段树进阶 可持久化 能够保留每一个历史版本的数据结构。 那么可持久化线段树就是能保留历史版本的线段树。 原谅我之前一直叫它可持续化线段树 。 可持久化线段树 一般来说,可持久化线段树本质其实是可持久化数组,即支持单点修改、单点查询。 因为要保留历史版本,那么如果对于每次的的修改和查询均新生成一棵线
阅读全文
摘要:特别浅的浅谈线段树 线段树进阶 懒标优先级 当我们的线段树维护的不再是一种区间操作,而是两种或者更多,要如何选择懒标的优先级,以便于我们更简单的维护我们想要维护的? 先看两个例子:P3373 线段树 2 和 P1253 扶苏的问题。 P3373 是 加法懒标 和 乘法懒标 之间的优先级问题,而 P1
阅读全文
摘要:Segment_Tree 线段树好题大赏 定义 线段树是一种二叉搜索树,线段树的每个结点都存储了一个区间,也可以理解成一个线段。 用处 维护区间信息。线段树可以在 的时间复杂度内实现单点修改,区间修改,区间查询等操作。 最典型的,也是最简单的就是 区间加 和 区间求和。 以
阅读全文
摘要:众所周知,区间 kth 有很多种求法。 本文中的时间复杂度和分数均以实现 P3834 为准。 为了更好地贴合现实,本文代码将更加符合学此算法时的实际情况。 排序 通过选择 / 冒泡 / 插入排序,将区间排序后输出 k 小值。 时间复杂度 。 实际得分:50 分 代码长度:425B
阅读全文
摘要:常用 STL 容器整合 一、vector vector 是 STL 提供的一种 内存连续,长度可变 的动态数组。 虽说动态数组,但 vector 的底层仍是定长数组。当数组大小不足时,vector 会倍增的申请、分配更多连续的空间。 定义 vector<int>h; 定义一个数据类型为 int 的
阅读全文
摘要:分块九讲 (别问我为什么鸽了这么久) 一些闲话 忽然好想学分块~~ LOJ 我来了!!! 要不是 Ynoi 做不动 qwq 题目 link 什么是分块 严格来讲,分块是一种思想,而非一种数据结构,又被称为“优雅的暴力”。 顾名思义,分块就是将一整个数组分成若干块的小数组,便于维护一些信息。 至于分多
阅读全文
摘要:STL 0. 简介 STL 即标准模板库(Standard Template Library),是 C++ 标准库的一部分,里面包含了一些模板化的通用的数据结构和算法。由于其模板化的特点,它能够兼容自定义的数据类型,避免大量的造轮子工作。NOI 和 ICPC 赛事都支持 STL 库的使用,因此合理利
阅读全文
摘要:莫队 两只小手跳来跳去 众所周知,莫队算法是由莫涛大神总结的一种~~短小精悍的~~离线暴力维护区间操作的算法。 因其简短的框架,简单好记的板子和优雅的时间复杂度而闻名。 莫队题单 普通莫队 (本部分主要以莫队的二维理解为主) 基本思路 ~~普通莫队就是最普通的莫队。~~ 举个简单的例子: 对于给定的
阅读全文
摘要:刚学平衡树的时候写的了,感觉写得好烂。而且现在不记得 Treap 了,也不好维护,更不舍得删,就当是我的黑历史吧。 二叉搜索树 定义 二叉查找树(Binary Search Tree),是一棵空树或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不
阅读全文
摘要:珂朵莉 我永远喜欢珂朵莉。 如果幸福有颜色,那一定是终末之红染尽的蓝色! 一个 dalao 的 图 。 萌娘百科: 珂朵莉树 珂朵莉树是基于 set 的暴 (pian) 力 (fen) 算法。 前置知识 优点 ~~珂朵莉全身都是优点。~~ 码量小,思路清晰易查错。 应用范围 含推平操作,即将一个区间
阅读全文
摘要:树链剖分 将树转化为线性序列,便于维护树上信息。 include: 重链剖分,长链剖分,实链剖分。 注:此文默认读者已经熟悉线段树的基本操作,不熟悉这可以先看这个:线段树 重链剖分 剖树 建图 很普通的邻接表存图: void ins(int x,int y) { nex[++cnt]=fir[x];
阅读全文