
Splay伸展树
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BZOJ 1588 [HNOI2002]营业额统计(Splay)
思路:算是很裸的Splay了。我们知道 Splay 是一个排序二叉树。结点 左子树 一定都小于 当前结点。右子树一定都大于当前结点。那么我们插入一个值后。找前驱和后继 取个最小值不就ok了么。有几个注意的。 当插入值不成功时, 最小值肯定是0 不用算的, 算的话 会出错的, 因为这个值并没有加进去。另外, 当是第一个数时, 直接加这个数的绝对值即可。原创 2017-07-14 10:33:11 · 357 阅读 · 0 评论 -
BZOJ [HNOI2004]宠物收养所 (Splay)
思路:开始想的是建立两棵Splay, 来回倒,宠物建立一个, 人建立一个, 然后剩下的问题就是找另一个树的前驱和后继。但是在超时, 可能哪里写挫了, 也可能是两棵本身就过不了。于是借鉴了另一个很机智的思路:想一想就知道, 在任意时刻,不可能既有宠物,又有人。因此我们建立一个Splay 即可, 开一个变量 标记当前时刻 树里存的是人 还是宠物。这样就转换成了一棵树上的原创 2017-07-14 20:00:59 · 360 阅读 · 0 评论 -
POJ 3481 Double Queue (Splay || 水题)
题意:三种操作:1. 插入对键值[key, value]2. 输出最大的key 并删除。3. 输出最小的key 并删除。思路:这显然是一个map。 其实一个水题, 拿map 模拟直接过了。 但是最近练习一下Splay。 就写炸了= =很容易用Splay模拟 来实现。第一种操作: 直接从根开始插结点即可。第二种操作,最大的key 直接从当前根结点找后原创 2017-07-14 16:50:33 · 422 阅读 · 0 评论 -
HDU 3487 Play with Chain(Splay)
题意:操作1:将区间[a,b]切下来放到c位置后面。操作2:将区间[a,b]翻转。输出最后的数列。思路 :显然Splay。翻转就是加一个 翻转标记即可。正常操作。简单说一下 切割区间。先把a-1 转到根, 在把b+1 转到根的下面, 将根右儿子的左儿子切下来(保证子树是区间[a,b])pushup一下在把c转到根, c + 1 转到根的下面, 根右儿子 左儿原创 2017-10-10 10:29:58 · 613 阅读 · 0 评论 -
POJ 3580 SuperMemo (Splay)
思路:区间的一系列操作, 还有翻转什么的,显然Splay主要说一下 那个循环右移的操作吧次数先对总长度取模, 因为相当于有循环节。然后 这个操作 相当于 把一个区间分成两个子区间, 把后面挪到前面。假设两个区间是 [s1, e1]和 [s2, e2]那么先把s2-1 转到根, e2+1 转到根的下面, 将e2转到e2+1的下面,将 e2+1的左子树 切下来。这样就把后原创 2017-10-12 16:52:51 · 589 阅读 · 0 评论