平衡树
文章平均质量分 53
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ1588]营业额统计(平衡树splay)
心信其可行,则移山填海之难,终有成功之日。心信不可行,则反掌折枝之易,亦无收效之期。原创 2016-03-30 13:56:14 · 789 阅读 · 0 评论 -
[BZOJ1500][NOI2005]维修数列(splay)
题目描述传送门题解splay模板题(笑 这题是我今年1月左右看到的。记得当时只调过了样例然后交上去过了一个点就用了我一天的时间。果然我还是太傻逼。 填上了好大一个坑。 前5个都是splay的基础操作,就是第6个比较麻烦。因为要维护区间最大连续子序列和,可以维护3个值:Max子树最大连续子序列和,maxl子树自左端起最大连续子序列和,maxr子树自右端起最大连续子序列和。注意这里的Max是不允许原创 2016-12-04 21:26:06 · 915 阅读 · 4 评论 -
[BZOJ1112][POI2008]砖块Klo(splay)
题目描述传送门题解维护一段长度为k的区间的splay,每一次查询中位数即可。 每一个点只会被加入和删除一次,时间复杂度O(2nlogn)O(2nlogn)。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#define N 100005const LL原创 2016-12-05 14:05:06 · 554 阅读 · 0 评论 -
【bzoj3224】普通平衡树
如何让你遇见我,在我最美丽的时刻。原创 2016-02-04 20:47:45 · 4928 阅读 · 1 评论 -
[BZOJ2733][HNOI2012]永无乡(并查集+splay启发式合并)
题目描述传送门题解比较裸的splay+启发式合并,暴力地将小的拆了插入到大的里面去就可以了。每一个集合可以用并查集来合并。 注意暴力拆的时候要做一个中序遍历,因为如果自顶向下拆的话有些父子关系会打破,这样就无法继续进行了。代码#include#include#includeusing namespace std;const int max_n=1e5+5;int原创 2017-01-06 09:25:10 · 1072 阅读 · 0 评论 -
[BZOJ2300][HAOI2011]防线修建(凸包+splay)
题目描述传送门题解将删除转化成倒序插入 首先对于初始点建立凸包,每一次插入,在凸包上找到离这个点最近的两个点然后不断向两边删点维护凹凸性 可以用splay维护 这道题还是比较简单的,没有重点并且点的坐标∈(0,n)\in(0,n),所以这只是一个上凸壳,随便维护一下就行了 如果是一个完整的凸包的话,用斜率乱判会更麻烦一些代码#include<algorithm>#include<iostr原创 2017-01-06 09:01:09 · 712 阅读 · 0 评论 -
[BZOJ2761][JLOI2011]不重复数字(splay)
题目描述传送门题解练习平衡树代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 50005int T,n,x,root,sz;bool flag;int f[N],ch[N][2],key[N];void clear(){ flag=false; root=原创 2016-12-05 14:27:20 · 479 阅读 · 0 评论 -
[BZOJ1058][ZJOI2007]报表统计(线段树+splay)
题目描述传送门题解只能往原数列的后面插实际上更方便了,要不然似乎要写两棵splay233 对于MIN_GAP,一棵线段树维护原序列里的每一个位置,实际上后来插一插就变成了一段区间。维护左端点的数字,右端点的数字,这一段区间的最小值。每一次插入只会修改某一个叶子节点的右端点 对于MIN_SORT_GAP,用一棵splay就行了,维护的和线段树相同代码#include<algorithm>#inc原创 2017-03-27 16:32:23 · 586 阅读 · 0 评论 -
[vijos1459]车展(splay)
题目描述传送门题解在splay里维护一下子树的size和sum。 n2n^2枚举区间,每次加一个点,然后查询中位数。用size和sum计算一下答案。 预处理出来n2n^2个区间了之后直接统计答案即可。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#原创 2016-12-04 11:24:01 · 795 阅读 · 0 评论 -
[BZOJ1493][NOI2007]项链工厂(splay)
题目描述传送门题解好久没写数据结构了 维护size、有几段sum、最左边和最右边的颜色lc和rc 需要注意的几个地方: 1、因为在开始和结尾插入了点,注意find的编号问题 2、所有标记都是对当前点已经做过但是对儿子并没有做过 3、交换的时候要同时交换lc和rc 4、提取区间之后要将根的右儿子和根都update 5、rotate和find的时候不要忘了update和pushdown原创 2017-03-17 11:14:34 · 597 阅读 · 0 评论 -
[BZOJ1014][JSOI2008]火星人prefix(hash+splay)
题目描述传送门题解用splay维护一段区间的hash值,然后每一次查询的时候二分+判定就行了 算hash值update的时候只需要维护一下左右子树的大小 注意插入一个前驱一个后继,编号不要算错了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using name原创 2017-03-27 14:04:22 · 419 阅读 · 0 评论 -
[BZOJ3786]星系探索(dfs序+splay)
题目描述传送门题目大意:给出一棵树,支持几个操作:Q x询问点x到根的路径上的点的权值和;C x y将以x为根的子树接到y上;F x y以x为根的子树中的每个点的权值加y题解这题卡数组…必须写结构体或者指针的splay才能过 首先将这棵树按照dfs序展开,对于每一个点维护一个入栈点和一个出栈点,入栈点的权值为点权,出栈点的权值为点权的相反数 用splay来维护这个dfs序列,对于Q操作,其实就是原创 2017-04-17 17:30:32 · 523 阅读 · 0 评论 -
[BZOJ3729]Gty的游戏(dfs序+splay)
题目描述传送门题目大意:给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略。支持几种操作:1 x询问将x的子树中的石子移动到这个节点先手是否有必胜策略;2 x y将节点x上的石子修改为y;3 x y z在节点x上连接一个节点y(x为y的父亲),石子数为z。强制在线。题解首先考虑静态的树。对于单个点来说,其实是一个巴什原创 2017-04-17 20:00:07 · 645 阅读 · 0 评论 -
[BZOJ4864][BeiJing 2017 Wc]神秘物质(splay)
题目描述传送门题目大意: 有一列数列,支持以下操作 对于一列数,相邻一段中最大和最小的两个数的差值称为区间极差。 merge x e 当前第 x 个数和第 x+1 个数合并,得到值为 e 的新数; insert x e 在当前第 x 个数和第 x+1 个数之间插入一个能量为 e 的新数。 max x y 当前第 x 到第 y 个原子之间的任意子区间中区间极差的最大值; min x y 当原创 2017-05-04 08:55:52 · 948 阅读 · 0 评论 -
[BZOJ4561][JLoi2016]圆的异或并(扫描线+splay)
题目描述传送门题目大意:在平面直角坐标系中给定N个圆。已知这些圆两两没有交点,即两圆的关系只存在相离和包含。求这些圆的异或面积并。异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑。题解这题并没有做出来。。想了很多很多种不科学的方法。。 首先对于一个圆来说,可以将其分成上半个圆弧和下半个圆弧,并且在扫描整个圆的过程中(对于每一个横坐标),两个圆弧的相对位置不变。对于圆原创 2017-04-22 18:48:36 · 1015 阅读 · 0 评论 -
[BZOJ2584][Wc2012]memory(扫描线+splay+线段树)
题目描述传送门题目大意:在二维平面中有n个线段,线段互不相交,每一次一个操作将一个线段向四个方向之一移走(也就是平移到无穷远处),如果移动的过程中被其他线段所阻挡则移动是不合法的。求:最早的一次不合法移动;构造一种合法的移动序列将所有线段移走题解首先考虑第二问,实际上所有的线段都按照任意一个固定的方向移动就是可以直接都移走的,所以我们需要将线段编号。因为线段均不相交,所以对于任意两条线段的所有横坐标原创 2017-04-22 19:05:48 · 1297 阅读 · 0 评论 -
[BZOJ1895]Pku3580 supermemo(splay)
题目描述传送门题解splay模板题啦啦啦。 由于加了一个前驱和一个后继所以算编号的时候要小心一点。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 300005#define inf 2100000000int n,m,x,y,d,t,p,root,sz;int a[N]原创 2016-12-04 16:07:14 · 981 阅读 · 0 评论 -
[vijos1081]野生动物园(splay)
题目描述传送门题解这道题是主席树裸题啊对不对,为什么要放到平衡树分类里叻? 因为这道题有一个非常特殊的性质:区间不互相包含。 那就是说,如果将区间排序的话,左端点和右端点都是单调的。 那么就可以维护一个平衡树每次查询第k大值就行了,时间复杂度O(2nlogn+mlogn)O(2nlogn+mlogn)。代码#include<algorithm>#include<iostream>#incl原创 2016-12-04 14:25:28 · 588 阅读 · 0 评论 -
[BZOJ1208][HNOI2004]宠物收养所(平衡树splay)
你用冰冷的指尖,在我的手心里轻轻地写下依赖。原创 2016-03-23 09:14:08 · 683 阅读 · 0 评论 -
[BZOJ1503][NOI2004]郁闷的出纳员(平衡树splay)
海水是咸的,因为它包含了人世所有的泪水;泪水是咸的,因为它承载了太多的欢乐和苦悲。原创 2016-03-23 16:07:37 · 804 阅读 · 0 评论 -
[BZOJ3223]文艺平衡树(平衡树splay)
很渴望下一场干净的雪。原创 2016-03-23 16:58:05 · 1183 阅读 · 0 评论 -
[CODEVS1343][HNOI]蚱蜢(平衡树splay)
还是要继续填数据结构的坑。。。原创 2016-03-23 23:23:51 · 705 阅读 · 0 评论 -
[BZOJ1862][ZJOI2006]GameZ游戏排名系统(平衡树splay)
美只可以选择两条出路:成为罪恶的粮食,或者,成为罪恶本身。原创 2016-03-24 18:27:44 · 1091 阅读 · 0 评论 -
[BZOJ1056][HAOI2008]排名系统(平衡树splay)
真正的精神强者必是宽容的,因为他足够富裕。嫉妒是弱者的品质。——送给我自己。原创 2016-03-24 18:37:17 · 1139 阅读 · 0 评论 -
[BZOJ1861][ZJOI2006]书架(平衡树splay)
茫茫沙漠,滔滔流水,于世无奇。原创 2016-04-07 16:21:12 · 631 阅读 · 1 评论 -
[BZOJ1251]序列终结者(splay)
你说,“梦就是梦” “我不会再扮演傻瓜了。” 你说,“因为我还有灵魂。”原创 2016-04-27 10:57:08 · 885 阅读 · 0 评论 -
[BZOJ3196]二逼平衡树(线段树套splay)
花费了不知多少页来描述我们的心情却不知为何填不满一行的空白原创 2016-04-29 09:59:08 · 2845 阅读 · 0 评论 -
[CODEVS1743]反转卡片(splay)
我想看一场盛大的流行陨落的过程、我要一直不停许愿、许到沧海桑田瞬息万变直到靠近你微笑淡晴的脸。原创 2016-05-11 20:31:43 · 807 阅读 · 0 评论 -
[BZOJ1691][Usaco2007 Dec]挑剔的美食家(贪心+splay)
在那将嘴唇咬紧的夜晚听到的是谁的声音在月光下不断回响是这个声音鼓舞着我前行原创 2016-04-27 22:56:36 · 1459 阅读 · 2 评论 -
[BZOJ1552][Cerc2007]robotic sort(splay)
梦想,可以天花乱坠;理想,是我们一步一个脚印踩出来的坎坷道路。原创 2016-05-02 17:26:10 · 1069 阅读 · 0 评论 -
[CODEVS3243]区间翻转(线段树||splay||块链)
All that you have lost can be won back bit by bit as long as you wish for it.原创 2016-09-18 18:33:59 · 1011 阅读 · 0 评论 -
[BZOJ3545][ONTAK2010]Peaks(splay启发式合并)
题目描述传送门题解离线之后排序,然后对于每一个询问,将所有边权比它小的加入。可以把各个连通块搞成一个个splay,连边的时候启发式合并,然后每一个询问在当前点所在的splay里找k大值就可以了。 这题还有主席树的做法,就是通过排序之后将点重新编号,保证在任何时刻和某一个点连通的所有点组成一个连续的区间,然后实际上就是一个静态主席树找区间第k大了。代码#include<algorithm>#inc原创 2016-12-11 18:31:25 · 712 阅读 · 0 评论 -
史上最详尽的平衡树(splay)讲解与模板
首先声明:万分感谢gty大哥的帮助!这年头能找到简单易懂的数组版平衡树模板只能靠学长了! 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),size[i]表示包括i的这个子树的大小;sz为整棵树的大小,root为整棵树的根。再介绍...原创 2016-02-03 20:59:45 · 33205 阅读 · 54 评论