随笔分类 - 数据结构
摘要:洛谷传送门 CF传送门 Solution 这是DP。 对于每一个位置 ,它所能到的范围是 ,所以如果想要走的步数最少并且最远,应该找 中有 的 。 这个可以用RMQ解决。 那么对于 \
阅读全文
摘要:洛谷传送门 这个题用到了单调队列的优化,但是精髓绝不止在于此。+_+ Solution 我们先不管字典序怎么办,想想怎么求最小的 首先,因为要的是绝对值,那么考虑将 化为 ,也就是将没有景点的城市看作会减少一个景点的城市(雾 设 表示城市 \(a
阅读全文
摘要:洛谷传送门 CF传送门 Solution 题解里都是暴力的做法,这里也介绍一下。 既然要求找最小的边,那么必然要将 的边从大到小排序,然后将每条边的两个端点尽量分到不同的集合,直到分不了,就可以输出答案了。 时间复杂度: 要不是时限 秒,就都得没了 但是
阅读全文
摘要:洛谷传送门 为什么总有人说这是长链剖分板子题? Solution 题意非常简洁,这让我少了转化题意这一步。 我们考虑什么样的三个点在树上满足两两之间距离 相等: 对于某一个点,它的子树内以它为LCA,距它 的三个点 对于某一个点,它的 级祖先以及子树内两个以它为L
阅读全文
摘要:听同机房大佬sky说这是平衡树好题,再加上本蒟蒻刚刚学习平衡树,所以写个题解加深记忆。 Solution 我们看见一操作是移动操作(连个修改都没有),可以想到拿平衡树进行维护整个序列,这是很显然的。 然后看二操作,询问区间某个数的出现次数。 好像我所学过的平衡树是没有这种技能的(可能是我太菜没听说)
阅读全文
摘要:Solution 因为要求路径上的字符重新排序后为回文串,也就是说出现次数为奇数的字符不会超过一个。我们给每个字符一个 形式的权值,那么合法路径异或和要么为 ,要么为 的形式。 设点 到根的异或和为 ,由于是边权,x和y路径上的异或和可
阅读全文
摘要:二维树状数组及(不会用到的)三维树状数组 前置芝士 一维树状数组(lowbit) 二维树状数组 二维树状数组涉及到两种基本操作,修改矩阵中的一个点,查询子矩阵的和 首先是修改点的操作: void update(int x,int y,int z){ //坐标为(x,y)的点增加z for(int i
阅读全文
摘要:树链剖分 前置芝士 就像它的名字,树链剖分是在一棵树上进行,在讲解中还会用到线段树和dfs,如果不会,打开链接自行搜索(主要是线段树的博客没做,还有不要问我为什么这算知识)。 一个节点的重儿子,为其更大的一颗子树的根节点。从这个点连向重儿子的边我们称为重边。 由重边连续连起来的点和边就组成了重链
阅读全文
摘要:启发式合并 概念 启发式算法是基于人类的经验和直观感觉,对一些算法的优化。 作用 可以启发式合并更加高级的数据结构,如 等 复杂度计算 每次把个数少的合并到个数多的?复杂度 可是我们注意到,每次合并后个数为合并前少的部分
阅读全文
摘要:线段树合并 前置芝士 动态开点线段树和权值线段树 乍一看,线段树合并和上面那两个奇怪的东西有什么关系。 其实,线段树合并的全称为动态开点权值线段树合并( 雾 如果对上面那两个奇怪的东西不理解可点开链接进行搜索(大雾 优点 动态开点线段树有着一些优点,比如说当你让某个节点继承另一个节点的左儿子或者
阅读全文
摘要:动态开点线段树 前置芝士 众所周知,普通线段树空间复杂度是 所以当n很大的时候,如果正常的去建一颗线段树,开4倍n空间显然会炸内存 怎么办呢? 这个时候,动态开点线段树出现了。 概念 动态开点线段树是一类特殊的线段树,与普通的线段树不同的是,每一个节点的左右儿子不是该点编号
阅读全文
摘要:权值线段树 前置芝士 顾名思义,权值线段树也算是一种线段树,它的本质也是线段树。所以在学习权值线段树之前,如果对普通线段树的掌握不太熟,可以先去这里去搜索线段树进行学习。 而权值线段树的进一步本质则是用线段树维护桶。同理,如果不知道桶是什么可以到这里进行搜索。 概念 我们知道,普通线段树
阅读全文
摘要:本人太懒,一个链接足已 前人之树好乘凉 优化队列
阅读全文