基本C/C++、STL(vector、set、map、queue、string、algorithm)枚举、贪心、递归、分治、递推、模拟构造、位运算、常数优化数据结构队列、堆、栈、链表排序(插入、冒泡、快速、归并、堆、桶、基数)二分查找、散列表、并查集、哈夫曼树排序二叉树、左偏树、平衡树(Splay/...
分类:
其他好文 时间:
2014-05-09 08:10:36
阅读次数:
338
题目大意:
添加和删除一个数,然后输出中位数。
简单的Splay 维护Splay上有多少个节点就可以了
#include
#include
#define inf 1LL<<60
#define maxn 222222
#define keyTree (ch[ch[root][1]][0])
using namespace std;
typedef long...
分类:
其他好文 时间:
2014-05-07 07:46:42
阅读次数:
405
裸的Splay 翻转+剪切粘贴
Play with Chain
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3397 Accepted Submission(s): 1408
Problem Des...
分类:
其他好文 时间:
2014-05-04 09:11:28
阅读次数:
280
主要操作为Splay中插入节点,查找前驱和后继节点。 1: #include 2: #include
3: #include 4: using namespace std; 5: #define MaxL 100005 6: #define INF
0x7ffffff 7: #define keyT...
分类:
其他好文 时间:
2014-05-01 14:16:03
阅读次数:
633
要不是为了写splay的区间旋转的下放,我才不会写线段树的lazy下放来练练手(我原来的lazy都是跟着函数走的。。)这个时候我们得对lazy进行重新的界定,那就是lazy对当前节点是不产生影响的,而是对它的儿子产生影响。也就是说,当我到了某一个[l,r]区间,我不仅要更新它的lazy值,还要更新本...
分类:
其他好文 时间:
2014-04-30 23:44:18
阅读次数:
426
Splay 树的比较基本的序列维护操作, 用getSeg( int l, int r) 获取要操作的区间
若:获取区间[l,r],非空,getSeg(l,r),然后KT指向区间[l,r]
若:获取区间为空,如当要在l位置插入一个值时,则getSeg(l,l-2),然后可在KT赋值新节点
D. Cup Trick
#include
#include
#include
#include...
分类:
其他好文 时间:
2014-04-30 22:14:40
阅读次数:
326
插入操作,删除操作和置换操作都是单点的,所以不需要lazy标记。这个很简单,都是两次RotateTo,一次Splay操作就搞定。
求最大连续字段和的操作和线段树的题目类似,只需要保存最左边的连续最大字段和,最右边的连续最大字段和,整个子树的连续最大字段和就OK,整个子树的和就OK。
注意PushUp...
分类:
其他好文 时间:
2014-04-29 21:11:43
阅读次数:
628
题目大意:
两个操作
1 id op 把id的位置+op
2 id op 查询在【id,op】之间的所有的数的差
思路:
关键是pushup函数。
自己退一下会发现,跟区间的总和,区间的节点个数有关。
比如如果左区间是 1 2 的话
右区间来一个 9
那么
就要加上
9-1+9-2
#include
#include
#include
#incl...
分类:
其他好文 时间:
2014-04-29 13:44:22
阅读次数:
475
我感觉伸展树越来越模版了,没想到这么轻易的就过了。。。
把光标位置标记为pos
MOVE:pos++或者pos--
INSERT:把光标旋转至根部,然后把光标后一个字母旋转至根的右子树,然后把insert的内容插入到root的右子树的左子树
ROTATE:把光标旋转至根部,然后把光标后一个字母旋转至根的右子树,然后把rev[root10]取反
GET:得到光标位置的后...
分类:
其他好文 时间:
2014-04-29 13:31:22
阅读次数:
498
伸展树模版真的好长好长。。。
cut a b c:把第a-1个数伸展到根节点,把第b+1个数伸展到a的右子树,然后把ch[ch[root][1][0]]拿掉,放在剩下的树的第c个节点下。
flip a b:把第a-1个数伸展到根节点,把第b+1个数伸展到a的右子树,然后翻转ch[ch[root][1][0]];
由于会出现操作两边的情况,所以加了两个-1节点。
注意:
1,输出的时候要注...
分类:
其他好文 时间:
2014-04-27 22:31:19
阅读次数:
295