![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Evolution__
这个作者很懒,什么都没留下…
展开
-
数组+链表 = [骗分]块状链表
前言众所周知,对于一个一维的数组,或是一个字符串,我们可以使用两种办法:数组或链表两种方法来储存。但是,看了国家集训队2008年苏煜的论文之后,就知道了一种神奇的骗分方式:数组+链表形成的块状链表。 先来看看块状链表和两种方式的对比 方式 修改 查询 链表 O(N)O(N) O(1)O(1) 数组 O(1)O(1) O(N)O(N) 块状链表 O(N−−√原创 2017-01-15 20:43:13 · 548 阅读 · 0 评论 -
[平衡树]Tree(BST) + Heap = Treap
引入首先其实平衡树就是BST,即二叉查找树,然后尽量使这棵BST保持平衡。 我们知道BST容易退化,所以就有人发明了AVL树和红黑树,虽然这两种树的运行速度很快=_=,但是代码很复杂, 插入删除旋转情况有很多种,才保证了它的平衡,所以后来又出现了Treap这种平衡树。 虽然Treap比较简单,但是时间上却要稍稍差一点,而且有极小到几乎没有的可能(但是还是有)会退化,但显然在平时也已经够用了, 所原创 2017-08-10 21:03:13 · 335 阅读 · 0 评论 -
[Treap] poj2761 Feed the dogs
题意给出一个序列,然后给出不同的提问。 提问就是查询在这个序列的某一个区间的第k大思路这题按道理来说应该是主席树的模板题,但是在网上看到其实用Treap也可以静态地处理,所以在这里就说说这种Treap的静态处理方法吧。 首先所有的区间都是互不包含的,尽管有可能会相交。 那么可以先按照顺序先排序,然后从左往右往treap中加入元素,然后查询第k大,接着到下一个区间就把多的删掉,没有的加进去。原创 2017-08-18 21:18:34 · 217 阅读 · 0 评论 -
[Treap] poj 1442 Black Box
题意给出一个队列, 然后对于u(i)u(i),查询从第一个到u(i)u(i)的这一串当中的第i个数思路基本就是Treap的裸题,然后静态处理,因为u(i)u(i)是有序的,所以可以按照顺序来查询,然后基本就是套Treap的模板了代码依旧是谜一般的RE,去掉了srand就AC了……至今都不知道是为什么#include <ctime>#include <cstdio>#include <cstdli原创 2017-08-19 20:45:13 · 270 阅读 · 0 评论 -
[Treap] LA5031 Graph and Queries
题意&思路其实蓝书上面已经说的很清楚了,就是给一个图,每一个点都有一个值,然后不断地删除某条边,修改某个点的值,然后查某个联通块里的第k大。 做法就是静态处理,反过来做。因为如果是删除的话,有可能会导致一棵Treap要分裂,然后这显然很不好处理,相比起来往一棵Treap当中插入另一个显然更好,那当然是反过来做更好。 那么用并查集来确定某个点所处于的块。 合并的时候启发式合并,为什么说是启发式合原创 2017-08-24 19:31:04 · 254 阅读 · 0 评论 -
[平衡树]Treap实现Rank Tree
引入在之前的介绍Treap中,只有实现一般的BST的功能,相当于是一个STL的set,但是STL的set过度封装,所以对Treap稍加修改还可以实现一些其他的功能。 比如说Rank Tree(名次树)基本概念Rank Tree在这里是建立在Treap的基础上写的。主要功能包含了Treap的所有功能,以及查询某一个排名是哪个数字(kth操作),以及查询某一个数字的排名(rank操作)实现对于Trea原创 2017-08-15 22:16:16 · 465 阅读 · 0 评论 -
[Treap]poj2985 The k-th Largest Group
题意给出N只猫,然后有两种操作,分别是把两只猫所在的组合并,另一个是查询第k大的小组的猫的数量思路其实这道题目有很多种做法,但是查询第k大当然是用平衡树是最好的。那么在这里用并查集来记录每一个猫的小组,然后在Treap中插入每一个小组的数量。修改的时候就把原来的两个删去,然后再插入合并之后的值。 但是这种方法会超时……可能是Treap写得不好的原因。那么很容易想到优化,因为输入保证查询的是在范围内原创 2017-08-22 22:06:57 · 280 阅读 · 0 评论