平衡树
文章平均质量分 78
doveccl
这个作者很懒,什么都没留下…
展开
-
[POJ 3580]Super Memo
这是一道非常好的题目,考察对于splay(或其他平衡树)的综合应用,需要注意的是splay 上浮 和 下沉 的实现,我的splay以自顶向下方式实现。#include #include using namespace std; const int inf=~0U>>2; int a[200010],lazy[200010],mi[200010],size[200010]; bool rev[2原创 2014-01-21 13:26:26 · 744 阅读 · 0 评论 -
[HNOI 2004]宠物收养所
同样是HNOI的一道水题,非常鄙视那些用set的人…… 其实这是一道平衡树维护的题,很显而易见要维护两颗平衡树(好吧最开始做题目居然只建立了一棵SplayTree,然后WA到想哭……),而且两棵树中必然有一颗是空的,易证。 无非就是注意几个特别的操作,详见代码。#include #define abs(x) (((x)>=0)? (x):-(x)) #define MaxN 8001原创 2014-01-21 13:51:01 · 719 阅读 · 0 评论 -
自顶向下的Splay
一、简介: 伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列,因此他们的性能在实际应用中更优秀。 伸展树支持所有的二叉树操作。伸展树不保证最坏情况下的时间复杂度为O(logN)。伸展树的时间复杂度边界是均摊的。尽管转载 2014-01-21 13:21:35 · 829 阅读 · 0 评论 -
[NOI 2004]郁闷的出纳员
这是一道练手的水题啦!写网络流怕把splay忘了,于是来练习一下splay。这是一道很经典的splay入门题,用size域查询排名,维护的仍然是有序表,只是由于涉及到删除插入的操作,包括询问排名,所以线段树不是很好实现(但事实上是可以的)。 尽管是道很基础的题,但是还是有很多地方值得注意: 1、由于员工工资可能是一样的,所以如果让重复的元素出现在树中,则会使删除操作变得异常麻烦。于是我们应该添原创 2014-01-21 13:48:48 · 878 阅读 · 0 评论 -
区间
题目描述 给出n个区间,一些区间被另一些区间包含,求出最大的层数。 输入: 第一行为整数n,接下来n行,每行两个整数x,y(0 输出: 输出一行只有一个整数,即最大层数。 样例输入: 6 2 10 6 9 1 2 7 8 1 8 8 10 样例输出: 3原创 2014-04-17 18:34:47 · 761 阅读 · 0 评论 -
[CQOI 2014] 排序机械臂
看完此题数据范围n 就是这句话:如果有高度相同的物品,必须保证他们排序后与初始的相对位置关系相同。 被样例2骗了,SB的写了一个错误的DP,然后由于splay太长时间没写,所以…… 对于这个限制条件,我给每个点加上了时间标记dnf(这当然不是tarjan……随手写写而已) 然后加上三个与DP相关的域:mi,ti,pos,分别表示当前区间可以取到的最小值、该最小值所对应的时间戳,要达到该最小原创 2014-04-07 21:16:25 · 3856 阅读 · 0 评论