随笔分类 - 数据结构 平衡树
摘要:题目大意 一些小朋友在排队,每次来一个人,第i个人会插到第x个人的后面。权值为y。保证x∈[0,i 1]。 按照最后的队伍顺序,依次输出每个人的权值。 解题分析 好气吖。本来是在做splay练习,然后发现这道题用splay写T掉了,可能是我的splay常数太大了吧。~~要不要考虑去学一下自顶向下建树
阅读全文
摘要:题目大意 维护一个序列,支持两种操作 操作一:将第x个元素的值修改为y 操作二:询问区间【x,y】内的元素的最大值 解题分析 splay的区间操作,事先加入两个编号最小和最大的点防止操作越界。 具体的区间操作类似于线段树。 参考程序 c++ include using namespace std;
阅读全文
摘要:题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值。 答案输出所有相差值的总和。 解题分析 = = 参考程序 c++ include using namespace std; const int INF=2000000000; class splay_tree { private:
阅读全文
摘要:Problem 平衡树 SBT 题目大意 维护一个序列,支持两种操作。 操作一:插入一个数。 操作二:询问第k小的数。 解题分析 ~~刷刷水题,再熟悉一下splay的基本操作。 ps:哇咔咔,有连续四天的假期了,好开心~~ 参考程序 1 #include <bits/stdc++.h> 2 usin
阅读全文
摘要:Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y。 操作2:删除编号在区间【x,y】内的数。 操作3:将编号在区间【x,y】内的数的权值增加为z。 操作4:询问编号在区间【x,y]内的数的权值和。 解题分析 由于增加了区间加和区间查
阅读全文
摘要:Problem 平衡树 Splay 题目大意 维护一个数列,支持三种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 操作三:删除大小在区间【a,b】内的数。 解题分析 和上一题相比,多了一个删除的操作。 首先将a的前驱节点x旋转到根,然后将b的后驱节点y旋转到x的右孩子,这样所有大
阅读全文
摘要:Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的,不过用指针的时候还是需要注意一些小细节,要防止对空指针进行赋值。 之后继续把指针版splay的各种
阅读全文
摘要:Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 解题分析 splay 模板题。 参考程序 1 #include <map> 2 #include <set> 3 #include <stack> 4 #includ
阅读全文
摘要:终于写完基础的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...
阅读全文

浙公网安备 33010602011771号