数据结构
文章平均质量分 81
Hypoc_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
李超线段树小结
废话这是一个用来维护一些二维平面上线段的信息的数据结构。思想不复杂,代码不难写,也不像某同行吉司机线段树一样较难分析复杂度,还是很容易学会的。这种大概人人都会的东西就只有我这个蒟蒻现在才学了qwq……正题例题长这个样子:你需要维护两种操作:1、增加一条线段;2、给出 ccc,询问直线 x=cx=cx=c 经过的线段中,最上面那条线段是谁。在有些题中,询问的不是线段是谁,而是与该线段交点的y坐标是多少,但都是一样的。考虑用线段树来维护 xxx 坐标,在线段树的每个节点上,维护一个最优势线段原创 2020-10-20 10:14:06 · 378 阅读 · 0 评论 -
K-D tree小结
介绍是一个能维护多维空间中点集的数据结构。各方面操作复杂度据说都比较玄学。构造假设现在要维护的是一个 kkk 维点的点集。K-D tree会构造成一个类似平衡树的样子,但是一般的平衡树只有一个键值,而这里每个点有 kkk 维的坐标,看起来不是很好比较。容易想到的方法是,每一个节点处只比较一维坐标,先选定一个点放在当前位置,对于剩下的点,这一维坐标比当前点的要小的话,就放在左子树里,否则放在右子树里。那么每个节点处比较哪一维坐标呢?普遍的方法是轮流比较,如果我的父亲比较的是第 ccc 维,那我就原创 2020-08-17 09:17:21 · 785 阅读 · 0 评论 -
笛卡尔树小结
废话这也是个咕了很久才学的算法,现在快省选了再不学就来不及了……然而模板并没有想象中的难,短短两三行就能写完,但是应用起来就很难了。正题笛卡尔树的每个节点有两个属性:ididid 和 valvalval。对于第一个属性,笛卡尔树满足二叉搜索树的性质,对于第二个属性,笛卡尔树满足堆的性质。下面以满足小根堆性质的笛卡尔树为例。比如说,对于这个序列:6,3,2,4,7,8,1,56,3,2,4,7,8,1,56,3,2,4,7,8,1,5,造出来的笛卡尔树就是:建树也很简单,从左到右依次插入每个节原创 2020-06-17 11:07:16 · 428 阅读 · 0 评论 -
待修主席树
废话主席树入门那篇博客至今已经一年半了,然而我现在才写待修主席树。网上很多人的待修主席树讲的不明白,往往是一句话带过,跟没说区别不大,大家上网搜资料学习当然都是想学的细致一点,那么对于写博客的人来说,自然要负起责任来写的详细一点。希望这篇博客能给你帮助。进入正题!前置芝士——主席树入门。以前的码风不优秀还请见谅qwq……在其他的博客里大家都能看到这样一句话:普通的主席树记录的是...原创 2019-09-16 09:25:39 · 469 阅读 · 0 评论 -
点分树——动态点分治
前置芝士:树上点分治进入正题啥是点分树?顾名思义,它和点分治密切相关,实际上,点分树就是将点分治时的重心相连,所构成的一棵树。举个栗子,比如说有这么一棵树:那么它的点分树就是这样的:因为有时候某些树的重心不唯一,所以点分树的形态也各异,但这都不影响对他的使用。点分树の用处引子看下面这道题:给一棵n个点的树,所有边的权都为1,问图中距离为k的点对数量简单~,点分治模板题...原创 2019-07-06 08:59:53 · 4721 阅读 · 0 评论 -
猫树
算法发明者:猫锟(巨佬)为表尊敬,先贴上他本人的文章:猫树——by 猫锟猫树的本质:预处理部分区间的答案,需要时直接合并。那么可以对询问的序列造一个线段树,然后预处理线段树上每一个点所对应的区间的答案,需要时合并即可。很经典的问题:区间最大子段和。对于树上的每一个节点,我们维护这样几个元素(设这个节点管理的区间为lll~rrr):1、slslsl,表示必须选lll位置上的数,能得到的最...原创 2019-08-17 11:57:18 · 1717 阅读 · 4 评论 -
树链剖分详解
树链剖分,正如其名,这个算法的主要思想就是 把“树”“剖分”成“链”那怎么实现以及它的作用是什么呢,以洛谷上的模板题为例子:已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z操作2: 格式: 2 x y 表示求树从x到y结点最短...原创 2018-07-09 16:45:55 · 12141 阅读 · 1 评论 -
主席树详解——从入门到放弃
要想学主席树,首先要搞懂可持久化线段树,因为主席树运用到了它的思想。主席树的模板题是:静态查询区间第k小那么主席树的做法就是,先把全部数字离散化,然后以每一个前缀建一棵权值线段树,显然,如果直接建,那么空间上是不允许的,但是我们发现,每两个相邻的前缀中,只有一个数的差别,所以,他们公共部分是很多的,于是,我们就可以用到可持久化线段树了!首先,要明确一下,主席树上每个节点的值的定义(我们...原创 2018-05-28 13:09:27 · 5470 阅读 · 2 评论 -
树状数组2——更高深的树状数组
一、区间修改区间求和这个东西可就不是把 单点查询区间修改 和 单点修改区间查询 合起来那么简单了,仔细想想,拿之前的办法都不咋地好做,那么怎么办呢,我们还是要用到差分数组,设原数组为a,差分数组为b,则b[1]=a[1],b[i]=a[i]-a[i-1]那么区间修改我们就解决了,只需要log的时间即可,但是,这种做法对于区间求和就很弱了,但是!保持我们的决心!不能被它吓到!我们首先看一下用...原创 2018-05-20 17:44:57 · 328 阅读 · 0 评论 -
树状数组1——树状数组入门
先上一发树状数组的经典图片吧:仔细看一下,发现tree的每一个节点的高度并不是随意的,而是由它转成二进制之后末尾连续零的数量决定的,连续零的数量加1,就是高度,例如:3->11 零的数量为0,加1等于1,所以它的高度就是16->110 零的数量为1,加1等于2,所以它的高度就是28->1000 零的数量为3,加1等于4,所以它的高度就是4我们看...原创 2018-04-12 15:22:39 · 841 阅读 · 0 评论 -
线段树详解
线段树这个东西,它是一棵二叉树,用途就是维护一个数列,它的思想类似于分治,分而治之,首先,这棵树的每一个节点有两个属性,l和r,表示自己管理的范围,那么这棵树的根,它的l和r自然就是1和n(n就是数列的总长度),然后,每个节点有两个儿子,分别管理 自己要管理的范围 的1/2 ,拿根节点做例子,根节点要管理1~n,那么它的左儿子就管理1~n/2,右儿子管理n/2+1~n,再记录一下自己左右儿子是谁,...原创 2018-04-25 17:11:12 · 453 阅读 · 0 评论
分享