随笔分类 -  数据结构 平衡树

摘要:题目大意 一些小朋友在排队,每次来一个人,第i个人会插到第x个人的后面。权值为y。保证x∈[0,i 1]。 按照最后的队伍顺序,依次输出每个人的权值。 解题分析 好气吖。本来是在做splay练习,然后发现这道题用splay写T掉了,可能是我的splay常数太大了吧。~~要不要考虑去学一下自顶向下建树 阅读全文
posted @ 2017-05-04 21:44 rpSebastian 阅读(216) 评论(0) 推荐(0)
摘要:题目大意 维护一个序列,支持两种操作 操作一:将第x个元素的值修改为y 操作二:询问区间【x,y】内的元素的最大值 解题分析 splay的区间操作,事先加入两个编号最小和最大的点防止操作越界。 具体的区间操作类似于线段树。 参考程序 c++ include using namespace std; 阅读全文
posted @ 2017-05-03 23:01 rpSebastian 阅读(182) 评论(0) 推荐(0)
摘要:题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值。 答案输出所有相差值的总和。 解题分析 = = 参考程序 c++ include using namespace std; const int INF=2000000000; class splay_tree { private: 阅读全文
posted @ 2017-05-03 19:54 rpSebastian 阅读(192) 评论(0) 推荐(0)
摘要:Problem 平衡树 SBT 题目大意 维护一个序列,支持两种操作。 操作一:插入一个数。 操作二:询问第k小的数。 解题分析 ~~刷刷水题,再熟悉一下splay的基本操作。 ps:哇咔咔,有连续四天的假期了,好开心~~ 参考程序 1 #include <bits/stdc++.h> 2 usin 阅读全文
posted @ 2017-04-28 00:04 rpSebastian 阅读(222) 评论(0) 推荐(0)
摘要:Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y。 操作2:删除编号在区间【x,y】内的数。 操作3:将编号在区间【x,y】内的数的权值增加为z。 操作4:询问编号在区间【x,y]内的数的权值和。 解题分析 由于增加了区间加和区间查 阅读全文
posted @ 2017-04-27 20:52 rpSebastian 阅读(250) 评论(0) 推荐(0)
摘要:Problem 平衡树 Splay 题目大意 维护一个数列,支持三种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 操作三:删除大小在区间【a,b】内的数。 解题分析 和上一题相比,多了一个删除的操作。 首先将a的前驱节点x旋转到根,然后将b的后驱节点y旋转到x的右孩子,这样所有大 阅读全文
posted @ 2017-04-26 22:38 rpSebastian 阅读(198) 评论(0) 推荐(0)
摘要:Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的,不过用指针的时候还是需要注意一些小细节,要防止对空指针进行赋值。 之后继续把指针版splay的各种 阅读全文
posted @ 2017-04-26 00:09 rpSebastian 阅读(195) 评论(0) 推荐(0)
摘要:Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 解题分析 splay 模板题。 参考程序 1 #include <map> 2 #include <set> 3 #include <stack> 4 #includ 阅读全文
posted @ 2016-08-06 22:52 rpSebastian 阅读(129) 评论(0) 推荐(0)
摘要:终于写完基础的splay了,嗯,还差个区间翻转没写,下次补上。 1 Program splay; 2 const maxn=2000008; 3 var l,r,fa,data,size:array[0..maxn] of longint; 4 num,i,rt,x,n:longin... 阅读全文
posted @ 2014-12-25 22:26 rpSebastian 阅读(169) 评论(0) 推荐(0)