这道题看似简单,不就直接二叉搜索树嘛!但是如果数b是单调递增出现的,则树会成链,那么还是O(n^2)的复杂度。此时我们边用到了Splay,由于splay是不断翻转的,所以就算某一时刻他成了一条链,也会马上旋转而变成另外的形态(深度减低),通过这样不断地变换可以防止长期停留在链的状态,以保证每次操作平均复杂度O(log ...
P3391 【模板】文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,...
洛谷P3391 【模板】文艺平衡树(Splay) \(fhq-treap\)实现。 我们旋转的时候已\(r\)用\(size\)分一次,在左子树里用\(l-1\)再用\(size\)分一次,剩下的右子树我们直接打个懒标记即可。 然后注意一下代码细节这题就做完了。 My Code: #include <bits/stdc++.h> #define il inline #define temp ...
1] == p] = u; //祖父节点pp原来的指向 p 的节点切换成 u tr[p].s[son] = tr[u].s[son ^ 1]; //父亲节点p的原来指向u的节点改成u的儿子 tr[tr[u].s[son ^ 1]].p = p; //u的儿子节点更新其父亲节点为p tr[u].s[son ^ 1...
P3391 【模板】文艺平衡树(Splay) 平衡树 题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1...
这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,m n表示初始序列有n个数,这个序列依次是(1...
洛谷P3391 【模板】文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1...
洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap) 题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1...
这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入输出格式 输入格式: 第一行为n,m n表示初始序列有n个数,这个序列依次是(1...
思路:明显平衡树维护区间修改,接近于板子题 值得一说的是,fhq-treap在维护序列时,void split(int p,int x,int &l,int &r)的意思不再是分离<=k和>k的两棵树 而是变为了 将序列p的前x个元素分离出来形成一棵新fhq-treap的l子树,另外的一部分形成另一颗 fhq-treap的r 子树 ...