Splay伸展树
aozil_yang
这个作者很懒,什么都没留下…
展开
-
BZOJ 1588 [HNOI2002]营业额统计(Splay)
思路: 算是很裸的Splay了。 我们知道 Splay 是一个排序二叉树。 结点 左子树 一定都小于 当前结点。 右子树一定都大于当前结点。 那么我们插入一个值后。 找前驱和后继 取个最小值不就ok了么。 有几个注意的。 当插入值不成功时, 最小值肯定是0 不用算的, 算的话 会出错的, 因为这个值并没有加进去。 另外, 当是第一个数时, 直接加这个数的绝对值即可。原创 2017-07-14 10:33:11 · 324 阅读 · 0 评论 -
BZOJ [HNOI2004]宠物收养所 (Splay)
思路: 开始想的是建立两棵Splay, 来回倒,宠物建立一个, 人建立一个, 然后剩下的问题就是找另一个树的前驱和后继。 但是在超时, 可能哪里写挫了, 也可能是两棵本身就过不了。 于是借鉴了另一个很机智的思路: 想一想就知道, 在任意时刻,不可能既有宠物,又有人。 因此我们建立一个Splay 即可, 开一个变量 标记当前时刻 树里存的是人 还是宠物。 这样就转换成了一棵树上的原创 2017-07-14 20:00:59 · 323 阅读 · 0 评论 -
POJ 3481 Double Queue (Splay || 水题)
题意: 三种操作: 1. 插入对键值[key, value] 2. 输出最大的key 并删除。 3. 输出最小的key 并删除。 思路: 这显然是一个map。 其实一个水题, 拿map 模拟直接过了。 但是最近练习一下Splay。 就写炸了= = 很容易用Splay模拟 来实现。 第一种操作: 直接从根开始插结点即可。 第二种操作,最大的key 直接从当前根结点找后原创 2017-07-14 16:50:33 · 393 阅读 · 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 · 559 阅读 · 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 · 526 阅读 · 0 评论