平衡树
文章平均质量分 68
荼白777
这个作者很懒,什么都没留下…
展开
-
P2343 宝石管理系统
宝石管理系统(Splay维护重复元素) 这题的Splay维护关键字是元素的值,而不是序列下标; 传送门 题面 Code #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; const int N = 200000 + 10; struct Tree{ int原创 2022-04-16 14:40:57 · 288 阅读 · 0 评论 -
Splay
定义 Splay是一颗平衡二叉树,但是往往没那么平衡,期望高度是log(n)log(n)log(n) 应用 不仅支持普通平衡树的操作,包括一些区间问题(一般用线段树解决)的也支持; 保证高度的思想 对某个结点进行操作的时候,将其旋转到树根; 这里的操作指的是像插入,查询等等; 也就是说,这跟操作系统的局部性原理类似,某个点既然当前用到了,那么后续肯定还会用到; 拉到根结点其实就是进行了一个类似缓存的操作; 应用这个思想,就能保证平均意义下,一次操作的时间复杂度是O(logn)O(logn)O(logn)级原创 2022-03-11 20:14:48 · 656 阅读 · 0 评论 -
[NOI2004] 郁闷的出纳员 ——Treap+整体偏移量
题面 郁闷的出纳员 思路 这里一个小技巧,题目让我们给所有员工加减kkk的工资,我们不需要真的去树里面加; 我们只需要维护一个偏移量,对这个偏移量进行加减即可; 接着考虑删除会导致什么情况; 删除可能会导致员工离职,我们只需要像链表一样去操作即可; 不断的迭代去删除; #include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef long lon原创 2021-10-07 19:47:16 · 92 阅读 · 0 评论 -
Treap模板
不用手写的情况 如果题目中仅仅涉及到以下几种操作,我们可以用setsetset代替; 括号为setsetset对应的操作 插入(insert)(insert)(insert) 删除(erase)(erase)(erase) 找中序遍历的前驱/后继(−−/++)(--/++)(−−/++) 找最大/最小(begin/end−1)(begin/end-1)(begin/end−1) 注意这里的前驱和后继是树中存在的 有些题目会让我们求大于xxx的最小值以及小于xxx的最大值,这些值树中是不存在的,就需要我们原创 2021-10-06 21:07:30 · 84 阅读 · 0 评论