
Splay
a1s4z5
这个作者很懒,什么都没留下…
展开
-
伸展树(splay)
在书上或者别人的博客上看的时候感觉还不是很明显,但是自己写出来并调试之后感觉真是十分的炫酷特别是调试的时候,感觉这棵树就好像活的一样(在不断的访问最后的一个节点的时候,能看到树的层数在不断的减少,直到理论的极限(如果想知道一颗活的树是什么样的体验,可以自己调试一发(这里窝为了方便直接用0~n-1作为树的元素,你也可以选择自己喜欢的一个方式(因为只是第一份代码,所以还没有原创 2015-10-28 09:34:27 · 496 阅读 · 0 评论 -
HDU 3487 Play with Chain
人生第一个splay题。区间分裂,区间合并还有区间翻转都是比较裸的板子一个区间分裂成三个区间还是写一个两两分裂的函数比较好写(区间合并也是感觉其他也没有什么要针对这个题说的只要splay写好了就能过以及代码如下#includeusing namespace std;#define l ch[0]#define r ch[1]struct no原创 2015-10-29 22:27:02 · 436 阅读 · 0 评论 -
Poj 2828 Buy Tickets
一个线段树加点思维的题目被窝用splay水过去了Orz(其实我也不想的,只是正好刚学splay,就看到一个动态插入的题,就。。。就没忍住Orz用splay写就不用什么思维了,我的思路是给这个队列加上一个虚拟的最后一人来处理刚开始一个人都没有的时候插入的情况这样写还可以在之后插入的时候无脑插在左边,不用担心没有右边的节点的情况,大概就酱以及代码如下#i原创 2015-11-19 14:55:56 · 295 阅读 · 0 评论 -
Poj 2892 Tunnel Warfare
一段区间上有一段连续的房子,每次可以消灭一个房子,修复一个房子,询问某一个房子所在的区间的长度一个简单的线段树题用splay写的话也很简单的,因为能正好对应splay的一些基本操作(别人的板子是坠吼的#include#include#include#include#includeusing namespace std;const int maxn =原创 2016-03-15 19:42:02 · 282 阅读 · 0 评论 -
Bzoj 1500 维护数列
区间信息用lazy封装还是很劲的具体见代码嗯#include<bits/stdc++.h>using namespace std;struct Info{ int size; int lmax,rmax,sum,value; Info(int val = 0){ size = 1; lmax = rmax = sum = value = va原创 2016-07-12 16:36:47 · 340 阅读 · 0 评论 -
Hdu 1666 敌兵布阵
Hdu 1666 敌兵布阵单点更新,区间查询的线段树裸题强行拿来测了一下伸展树的板子#include<bits/stdc++.h>using namespace std;struct Info{ int mer; int size; Info(int m = 0){ mer = m; size = 1; }};Info operat原创 2016-07-06 11:16:45 · 352 阅读 · 0 评论 -
hdu 1698 Just a Hook
hdu 1698 Just a Hook一个简单的线段树支持把某个区间内的点都改为z,求所有操作之后的区间和#include<bits/stdc++.h>using namespace std;const int maxn = 112345;int arr[maxn * 4];int lazy[maxn * 4];#define root 1,1,n#define lson o<<1,l,m原创 2016-05-03 15:37:18 · 272 阅读 · 0 评论 -
bzoj1251 序列终结者
不错的伸展树入门题查询区间最大值,支持区间加一个值,区间翻转区间更新的时候像线段树一样打一个标记就好值得注意的一点是,虽然这是自底而上伸展的代码,但是该节点的祖先节点的lazy标记在zig/zag的过程中一定会”污染”到这个节点以及zig/zag的时候要保证这两个点是”干净的”其它的就很模板了,具体见代码#include<bits/stdc++.h>using namespace std;stru原创 2016-07-07 12:42:09 · 378 阅读 · 0 评论