伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。(来自百科)伸展树的操作主要是–rotate(x) 将x旋转到x的父亲的位置void splay(int x,int &k){ int y,z; while (x!=k){//...
分类:
其他好文 时间:
2016-01-10 22:35:50
阅读次数:
262
后面插进取的数并不影响前面的结果,所以用splay把最后的序列求出来直接LIS即可 1 #include 2 #define inc(i,l,r) for(int i=l;i=r;i--) 4 #define link(x) for(edge *j=h[x];j;j=j->next) 5 #defi...
分类:
其他好文 时间:
2016-01-07 22:40:02
阅读次数:
273
splay维护区间内的hash值+二分答案。。。 一开始脑残跑去维护各个前缀的hash值。。结果发现修改的时候没法打懒标记(也可能是我太弱不会) 跑去看黄学长题解发现直接维护区间内的hash值就可以了。。而且挺容易合并的TAT(其实挺显然的,都用splay了为啥还不维护区间的hash值。。。...
分类:
Web程序 时间:
2016-01-06 21:49:53
阅读次数:
303
//BY HZWER 1 #include 2 #include 3 4 using namespace std; 5 6 inline int read() 7 { 8 int x=0,f=1;char ch=getchar(); 9 while(ch'9...
分类:
其他好文 时间:
2015-12-31 07:10:41
阅读次数:
140
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1500[前言] 据说没打这题就相当于没打过Splay,这题简直就是让你内心崩溃的... 这题是一道综合味很强的题,初学者不要贸然尝试...先做些简单一点的[跟着笔者的步伐走...做一做32.....
分类:
其他好文 时间:
2015-12-28 21:47:40
阅读次数:
194
我写的是LCT,开始的时候修改操作挂了,正确的修改姿势有两种,一种是记录每个点实际的fa是谁,然后修改u的时候access(fa[u])然后splay(u),然后把u的pre直接指向该指向的点,fa[u]->ch[1]==NULL就可以了;另外一种是access(u),然后断掉它的左儿子,然后直.....
分类:
其他好文 时间:
2015-12-28 12:10:38
阅读次数:
213
最近被splay,treap,dlx淹没。。没写过考试的反思什么的感觉总结一下貌似很重要?T1 详情见codevs2466 本来hash可过的题结果只给了64MB(oj上是256MB) 水题没什么好说的。。map判重都能过 收获:(学习了一发康托展开)T2 codevs2467 貌似显然...
分类:
其他好文 时间:
2015-12-24 23:36:42
阅读次数:
204
BST就是二叉检索树,或者是二叉排序树,或者叫二叉搜索树等等。 BST的平衡问题可以去学习AVL树或者Treap或者Splay这些平衡树。 BST的一些高级应用: 1,求BST中比k小的数的个数: 只需在BST上面多维护值size,表示当前这个节点的子树的点的个数。 伪代码如下: 1 ...
分类:
其他好文 时间:
2015-12-22 16:08:41
阅读次数:
175
维护一个支持翻转次数M的长度N的序列..最后输出序列.1#include#includeusing namespace std;const int maxn = 130009;struct Node { Node *p, *ch[2]; int s, v; bool rev; inline vo.....
分类:
其他好文 时间:
2015-12-15 22:37:02
阅读次数:
254
Treap标准学习模板1.treap的基本了解(1)splay与treap的区别Splay的旋转操作是将普通节点转到根
而treap是将根转为普通节点(2)treap的时空复杂度treap的各项操作时间复杂度均摊为O(logn)。
由于treap的指针写法容易出错,所以通常用数组代替。
通常要有以下几种:
v[]——存放键值
rnd[]——存放随机出的优先级
l[],r[]——左右子树的...
分类:
其他好文 时间:
2015-12-05 11:22:24
阅读次数:
273