【模板】可持久化文艺平衡树-可持久化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学习第七篇——字典访问键与值
此程序的目的在于,正确而简单的访问字典的键与值 favorite_languages={ 'jen':['python','c'], 'sarah':['c'], 'edward':['ruby',' ...
- 【转】ubuntu 双机热备
1.关于软件安装 sudo apt-get install libssl-dev sudo apt-get install openssl sudo apt-get install libpopt-d ...
- iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)
iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...
- iOS-响应链(Responder Chain)
2017.05.08 20:40* 字数 1306 阅读 740评论 6喜欢 9 工作接近一年,很久没有更新博客.工作中学到很多知识点后面将花时间整理,作为对一年知识学习的总结: 下面是本篇博客的写作 ...
- CentOS的el5, el6, el7代表什么
https://www.cnblogs.com/EasonJim/p/9051851.html el: enterprise linux?
- 转:Linux下查看tomcat占用端口
https://blog.csdn.net/liufuwu1/article/details/71123597[root@server-crm mysql]# ps -ef | grep " ...
- react 路由4 学习
表单控件 受控表单组件 非受控的表单组件 demo:收集表单提交的数据 路由(V4) 特点:一切皆是组件 官网:https://reacttraining.com/react-router/ npm ...
- Java 验证码详解
1 使用Servlet实现验证码,涉及的知识点主要为java 绘图技术与session保存数据. HTML页面 <html> <image src='images/logo1.jpg ...
- Redis 安装学习
Linux下下载安装redis https://redis.io/download tar -zvxf redisxxx cd redisxxxx make ---进行安装 vim ~.bash_p ...
- js怎么能取得多选下拉框选中的多个值?
方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 1.HTML结构 1 2 3 4 ...