数据结构
文章平均质量分 74
Serene-shixinyi
这个作者很懒,什么都没留下…
展开
-
数据结构入门1—Treap
debug3个月把洛谷刷屏,终于过了。。。。(一开始写了两百行,后来看了大孙代码才搞点小技巧改短了些)treap,树堆,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为O(logn)。相对于其他的平衡二叉搜索树,Treap的特点是实现简单,且能基本实现随机平衡的结构。我们可以看到,如果一个二叉排序树节点插入的顺序是随机的,这样我原创 2017-08-07 21:51:04 · 216 阅读 · 0 评论 -
数据结构入门2—主席树
听说划分树能解决的问题主席树基本都能解决,感觉主席树好理解又好写(至少比那些乱七八糟的平衡树亲切多了),干脆就不学划分树了qaq%%%lljakfather所有题都是主席树模板题其实就是可持久化线段树啦。假如一个序列有n个数,有m次修改。首先我们想一想最暴力的方法就是建m颗线段树,虽然想想就心累,空间很难开的下。然后发现有些节点其实是可以多次利用的,于是把儿子指针迁过去就行啦(原创 2017-08-07 22:06:10 · 296 阅读 · 1 评论 -
数据结构入门3—莫队算法
分治一类的算法大多只能在离线时使用。莫队算法就是只能在离线下用。先看一道模板题:小Z的袜子Description作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在原创 2017-08-08 11:44:34 · 213 阅读 · 0 评论 -
数据结构入门4—权值线段树
一开始还以为是什么高级东东。就是一个线段树,只不过下标是代表数字的值。来看一个经典问题(来自http://blog.csdn.net/loi__dijiang/article/details/49449375)题目描述 Description 给定一个序列a1,a2,…,an,如果存在i小于j并且ai大于aj,那么我们称之为逆序对,求逆序对的数目数据范围原创 2017-08-08 11:57:10 · 3293 阅读 · 0 评论 -
数据结构入门7—左偏树
一种可并堆,具有左偏性质。每个点有一个距离。距离则是如下定义的: 节点i称为外节点(externalnode),当且仅当节点i的左子树或右子树为空( left(i) = NULL或right(i) = NULL );节点i的距离(dist(i))是节点i到它的后代中,最近的外节点所经过的边数。特别的,如果节点i本身是外节点,则它的距离为0;而空节点的距离规定为-1 (dist(NULL原创 2017-08-17 10:52:21 · 232 阅读 · 0 评论 -
数据结构入门5—分块
发现分块真的是一个好东西,就是优化过后的暴力啊。当修改的时间复杂度为O(n)而查询复杂度为O(1)或修改O(1)查询O(n)时用分块就可以转化为修改查询都是O(sqrt(n))的。虽然比log n要差一些,但是分块真的很好写啊。。比如一道LCT模板题 弹飞绵羊 //Serene#include#include#include#include#include#includ原创 2017-08-11 10:39:46 · 390 阅读 · 0 评论 -
数据结构入门6—文艺平衡树(Splay)
早就听说 Splay 就是不管干什么都Splay一下就可以了,但是听说傻可开脑洞打代码打了250行,惊恐。于是先学treap结果没想到一调试就搞了三个月。但是其实写过treap再学Splay就相对容易一些了。那就先学只有区间翻转的文艺平衡树。一开始一直弄不懂它的翻转操作,感觉很迷。但是其实和treap很像,只不过是以翻两下为一组,然后每次Splay把节点旋到指定位置。在三点一线的时原创 2017-08-11 14:19:41 · 1000 阅读 · 0 评论 -
数据结构入门8—K-D Tree
k-d树是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。K-D树是二进制空间分割树的特殊的情况。以上来自百度百科。其实就是一颗二叉树,用于处理多维空间问题,假如有三维,这棵树在第一层以x坐标来分左右子树,第二层以y坐标来分左右子树,第三层z坐标,第四层x坐标,第五层y坐标。。。每次坐标取中位数作为子树的跟是最好的。它可以用于高效查询距离最原创 2017-08-25 20:53:54 · 265 阅读 · 0 评论 -
数据结构入门9—虚树
原本以为K-D Tree比虚树难,但是后来发现虚树反而难理解一些。主要是关于找LCA的问题。假如我们有一些点是一定要在虚树里的,那么需要保证他们任意两点的LCA也在虚树里,否则树的结构就改变了。那么就需要用到dfs序了。我们求得每个点的dfs序,然后把这些点按dfs序排序,那么他们所有的LCA肯定是排序后某相邻两点的LCA。这个是可以证明的,我就不证了。然后找到LCA之后就是找每个原创 2017-08-25 21:16:54 · 1750 阅读 · 0 评论