Splay
oopslb
这个作者很懒,什么都没留下…
展开
-
hdu 1890 Robotic Sort (splay树 翻转 +删点)
题目 题意:n个数排成一列,每次选择序列中的最小值(如有多个,取原始位置最小的),把它和它前面的所有数翻转,然后把这个数从序列中删去。输出每次选择的最小值的下标。 思路:用数组原下标建树,然后排序,将小的排在前面,只要按照顺序将这数的下标翻转到根节点,他的左子树加上自己就是他要的答案,然后删点。 代码: #include<bits/stdc++.h> using namesp...原创 2018-07-28 22:22:16 · 122 阅读 · 0 评论 -
hdu 3487 Play with Chain (区间翻转+区间切割)
题目 题意:开始有一个1-n的序列,进行m次操作,cut a b c将区间[a,b]取出得到新序列,将区间插入到新序列第c个元素之后。filp a b 将区间a,b翻转,输出最终的序列。 思路:现将a-b这个区间取出来,然后再来将c这个位置断开,然后合并左边的和区间[a,b],将最大的旋转至根,然后和右边的合并. 代码: #include<bits/stdc++.h> usin...原创 2018-07-29 12:55:18 · 152 阅读 · 0 评论 -
bzoj 3224 普通平衡树 (Splay)
题目 思路:Splay模板题 代码: #include<bits/stdc++.h> using namespace std; #define MAXN 1000000 //f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子, //key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),...原创 2018-07-27 17:49:25 · 125 阅读 · 0 评论 -
2018牛客多校第三场 C Shuffle Cards (Splay)
题目 题意:将从p开始的s个数放在开头,经过若干个操作后,序列是怎样的 思路:Splay的模板题,我们首先要知道,可以通过三次区间翻转来达到区间交换的效果,例如1 2 3 4 5,我们要将4 5移到开头,首先1-5区间翻转变为5 4 3 2 1,然后将1-2区间翻转为4 5,3-5区间翻转1 2 3,这样就达到了区间交换的效果 代码 #include<bits/stdc++.h>...原创 2018-07-27 23:23:10 · 205 阅读 · 0 评论 -
bzoj 3233 文艺平衡树 (splay 区间翻转)
题目 思路:splay区间翻转的模板 代码: #include<bits/stdc++.h> using namespace std; const int MAXN=1e5+10; const int inf=0x3f3f3f3f; int size[MAXN],key[MAXN],f[MAXN],ch[MAXN][2],lazy[MAXN]; int a[MAXN]; in...原创 2018-07-27 23:26:49 · 121 阅读 · 0 评论