SPLAY_TREE(伸展树)
文章平均质量分 81
0o恋蓝o0
这个作者很懒,什么都没留下…
展开
-
hdu 4031 Attack (splay tree)
很容易想到 成功攻击次数 = 总攻击次数 - 防御次数。 然后把这两个分开处理就OK了拿过来练习splay tree#include #include using namespace std;const int N = 20007;#define KT ch[ch[root][1]][0]int root, ch[N][2], fa[N], sz[N];int su原创 2012-09-28 16:46:57 · 348 阅读 · 0 评论 -
hdu 2475 Box (splay tree)
不错的一道题, 自己怎么也写不出来, 于是去问了风神。 把每个箱子看成一个括号, 箱子a在箱子b里面, 就是括号b在括号a里面。这样第一组样例就变成了(【1】(【2】)【4】)【3】 (【x】表示第x个节点), 这样就有序了, 然后装进splay形成一个森林。0 1 就变成了( ( ) )1 2 4 30 6 4 6 1 0就变成了( ( ) )原创 2012-10-09 20:08:22 · 1043 阅读 · 0 评论 -
伸展树学习小结
第一次碰到伸展树的题目是在天津网赛上, 比赛的时候用双向链表A掉了, 第一次碰到, 也没想去看看的。 后来又有人问我会不会伸展树, 这~, 果断要去看了= 0 =。 先去百度了一下, 伸展树是二叉排序树, 所有的操作都基于旋转操作, 旋转后可以使树变得平衡, 使得查找的的复杂度在log(n), 好像很DBL的样子。 随后去网上找了一份PDF开始学习。 PDF(ht原创 2012-10-03 20:02:52 · 574 阅读 · 0 评论 -
HDU 3436 Queue-jumpers(splay tree)
题意:一开始n个人排除一队, 从1~n, 有三种操作:TOP 把第x个人换到最前面;Query输出第x个人的位置;Rank输出第x个位置的是哪个人。思路:由于N非常大, 很自然想到先离散化,这题的难点主要就在这里了, 离散化处理得好, 下面就好办了 。 这题要把Top 和Query离散化(这两个的x都表示人), 然后记录区间最左边的人是谁, 记录最右边的人是谁, 然后要改下pushup函数不再原创 2012-09-24 21:16:09 · 435 阅读 · 0 评论 -
HDU 3487 Play with Chain
这道题是我用伸展树A掉的第一道题, 题目意思很简单:有n个数, 两个操作, CUT a b c把第a~b的数取出来, 然后放在新的序列的第c个数后面;FLIP a b, 把区间a到b反转。一系列操作之后输出最后的序列。对于CAT 操作: 可以先把区间第a-1个数旋转到根节点, 然后再把b + 1旋转到根节点下, 这样区间[a, b]就变成了一颗子树, 接下来只要把这整棵子树拿下, 放在新的序列原创 2012-09-24 20:51:12 · 329 阅读 · 0 评论 -
HDU 4286 Data Handler (splay tree || 双向链表模拟)
这题是2012天津网络赛的题比赛的时候还不会splay tree当时是用双向链表模拟过掉的赛后听说这题是裸的splay tree, 现在就拿来练练splay tree, 还真的是超裸的splay tree, 就是结点太多, 最后输出的时候dfs会爆栈, 最后直接手写栈= 0 = , 结果pushdown函数忘记加了, 一直WA, 调了半天才发现, 弱爆了orz这题操作很多, 不过都不难原创 2012-09-26 10:08:08 · 428 阅读 · 0 评论 -
POJ 3580 SuperMemo (SPLAY TREE)
这道题的操作非常多ADD操作和REVERSE操作一样, 把区间变成子树, 然后直接加标记就可以了REVOLVE 看起来很厉害, 稍微分析一下就可以得出其实就是把区间后面的一部分和放到前面一部分的前面INSERT 操作可以把插入点之前的结点转到根结点, 插入点之后的结点转到根节点下面, 这样插入的位置就一定是根节点右儿子的左儿子(方便操作, 人为给splay tree加上两个端点结点)原创 2012-09-26 09:55:38 · 391 阅读 · 0 评论 -
2012 ACM/ICPC 杭州赛区 A题 HDU 4453 Looploop 伸展树
这题比较裸, 一看就是伸展树。就是有些小细节要注意, 为了避免反转时, 指针变化, 我是直接先把前面一段接在后面, 这样就不会出现指针变化的问题。 敲好以后一直TLE, 调了半天, 发现添加的时候我既然还是用n来添加= =(n表示现在的结点数,最后添加一个变量tn表示到现在为止出现过的结点数)。#include #include #include using namespace std原创 2012-11-14 12:01:25 · 992 阅读 · 0 评论