【模板】可持久化文艺平衡树-可持久化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 ...
随机推荐
- C. Anton and Fairy Tale
链接 [https://codeforces.com/contest/785/problem/C] 题意 初始时有n,第1天先加m开始吃1,但总的不能超过n,第i天先加m开始吃i(如果不够或刚好就吃完 ...
- 16-使用Selenium模拟浏览器抓取淘宝商品美食信息
淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...
- 亲测可以永久破解2018版本的pycharm
pycharm是很强大的开发工具,但是每次注册着实让人头疼.网络上很多注册码.注册服务器等等.但都只是一年或者不能用:为次有如下解决方案.亲测有效!!! 如果想让pycharm永久被激活,比如截止日到 ...
- 11-vue的使用
一.安装 对于新手来说,强烈建议大家使用<script>引入 二. 引入vue.js文件 我们能发现,引入vue.js文件之后,Vue被注册为一个全局的变量,它是一个构造函数. 三.使用V ...
- Apache Tomcat® - Which Version Do I Want?
Apache Tomcat® - Which Version Do I Want?http://tomcat.apache.org/whichversion.html
- nmon for Linux & Java
nmon for Linux | Main / HomePagehttp://nmon.sourceforge.net/pmwiki.php Java Nmon Analyser download | ...
- CodeForces 126B Password
题目链接:http://codeforces.com/problemset/problem/126/B 题目大意: 多组数据每组给定1个字符串S,问是否存在S的一个尽量长的子串,同时是S的前缀和后缀, ...
- synchronized与volatile的区别及各自的作用、原理(学习记录)
synchronized与volatile的区别,它们的作用及原理? 说到两者的区别,先要了解锁提供的两种特性:互斥(mutual exclusion) 和可见性(visibility). 互斥:即一 ...
- Python给照片换底色(蓝底换红底)
环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN10 64位,安装的函数库是 numpy-1.13.1+mkl-cp36-cp36m-w ...
- QTP 自动化测试桌面程序--笔记(下拉选择、右键菜单、在控件仓库中查找对应的控件)
0 在收集窗口控件信息时-最好将可输入的文字去掉,不然控件的名称按输入的文字标记 1 编辑时录制脚本-默认按当前显示的填入的数据标记控件 可以使用 tool-spy-查看控件的x,y 坐标,按坐标在学 ...