【模板】可持久化文艺平衡树-可持久化treap
题意
对于各个以往的历史版本实现以下操作:
- 在第 p 个数后插入数 x 。
- 删除第 p 个数。
- 翻转区间 [l,r],例如原序列是 \(\{5,4,3,2,1\}\),翻转区间 [2,4] 后,结果是 \(\{5,2,3,4,1\}\)。
- 查询区间 [l,r]中所有数的和。
做法:可持久化treap
定义
typedef pair<int,int> Pair;
结构体
struct Node {
int key, val, l, r, sum, size;// 键值 随机值 左子 右子 和 子树大小
bool rev;
void clear() { 全部清空 }
};
struct Treap{
int pool[], pooler;//内存池
Node t[];//树上的点
int root[];//
int now, all;//当前版本数 最新版本数
Treap() : now(0), pooler(0) {
pool[i]赋值为i
root[now] = pool[++pooler];
}
函数...
}
函数
int newroot(){内存池吐点}
int newnode(int x){
内存池吐点, 赋值(key = x, val, l, r, sum, size)
}
void delnode(int x){
点x清空, 内存池吞点
}
void next(){
新建根 复制根 now = all //更新至最新版本
}
void back(int x){
now = x; //回到原来的版本
}
void update(int x){维护sum, size}
void pushdown(int x){
下推rev标记
比如左边就是新建一个节点然后把左节点所有信息都复制上去
然后打rev标记
另一边同理
}
Pair split(int x, int p){
从以x为根的子树里切p大小的左部分
返回值{左部分根,右(即剩余)部分根}
如果size == p那么返回make_pair(x, 0);
如果size[l] + 1 == p那么返回make_pair(x, r);
先复制一下当前根
根据大小递归操作
记得update新子树根
并把(当前子树根+右子树)和左部分根合并哦(反之亦然)
}
void rev(int l, int r){
把树切成三块 中间那块是要翻转的
新建一个点为中间那块的根,把它打上rev标记
然后合并三棵树
更新root[now];
}
结束辣
【模板】可持久化文艺平衡树-可持久化treap的更多相关文章
- P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
P5055 [模板]可持久化文艺平衡树 链接 luogu 思路 可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久.以前以为很难一直没看,就是个板 ...
- 洛谷P5055 可持久化文艺平衡树 (可持久化treap)
题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护 ...
- 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)
题面 传送门 题解 日常敲板子.jpg //minamoto #include<bits/stdc++.h> #define R register #define inline __inl ...
- luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap
好题. Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in&quo ...
- 【LG5055】可持久化文艺平衡树
[LG5055]可持久化文艺平衡树 题面 洛谷 题解 终于不可以用\(Trie\)水了... 和普通的\(FHQ\;treap\)差不多 注意一下\(pushdown\).\(split\)要新开节点 ...
- BZOJ3223文艺平衡树——非旋转treap
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- [BZOJ3223]文艺平衡树 无旋Treap
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...
- LG5055 【模板】可持久化文艺平衡树
题意 您需要写一种数据结构,来维护一个序列,其中需要提供以下操作(对于各个以往的历史版本): 在第 pp 个数后插入数 xx . 删除第 pp 个数. 翻转区间 [l,r][l,r],例如原序列是 { ...
- Luogu5055 【模板】可持久化文艺平衡树(fhq-treap)
注意下传标记时也需要新建节点.空间开的尽量大. #include<iostream> #include<cstdio> #include<cmath> #inclu ...
随机推荐
- PYTHON访问数据库
PYTHON DB API(规范)框架 可以一次编写同时访问MySql\ Oracle \SQLServer...不同的数据库服务器:统一接口程序的混乱. 1.连接访问:connection(高速路) ...
- 动态规划-数位dp
大佬讲的清楚 [https://blog.csdn.net/wust_zzwh/article/details/52100392] 例子 不要62或4 l到r有多少个数不含62或者4 代码 #incl ...
- ElasticSearch(简称ES)
Windows下安装ElasticSearch ElasticSearch(简称ES)是一个基于Lucene的分布式全文搜索服务器,和SQL Server的全文索引(Fulltext Index) ...
- rbac组件权限按钮,菜单,可拔插
1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板 左侧以及上不动 **** <!DOCTYPE html> <h ...
- PHP的优化建议(仅借鉴)
转载: https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则 ...
- php单元测试
https://blog.csdn.net/gaisidewangzhan1/article/details/80347008
- STL中vector、set、list和map
- 设置SQLServer数据库内存
需要设置SQLServer数据库的内存配置.登录数据库,这里使用的是SQLServer2008,右键点击最上方的服务器名,在弹出的菜单中,点击属性] 打开服务器属性窗口.默认显示的是第一项[常规]内容 ...
- HTML5开发之meta标签的viewport使用说明
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而每一款手机有不同的分辨率,不同屏幕大 ...
- django rest framework权限和认证
Django rest framework之权限 一.Authentication用户认证配置 1.四种验证及官网描述: BasicAuthentication 此身份验证方案使用HTTP基本身份验证 ...