题目链接

题意

对于各个以往的历史版本实现以下操作:

  1. 在第 p 个数后插入数 x 。
  2. 删除第 p 个数。
  3. 翻转区间 [l,r],例如原序列是 \(\{5,4,3,2,1\}\),翻转区间 [2,4] 后,结果是 \(\{5,2,3,4,1\}\)。
  4. 查询区间 [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的更多相关文章

  1. P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap

    P5055 [模板]可持久化文艺平衡树 链接 luogu 思路 可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久.以前以为很难一直没看,就是个板 ...

  2. 洛谷P5055 可持久化文艺平衡树 (可持久化treap)

    题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护 ...

  3. 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)

    题面 传送门 题解 日常敲板子.jpg //minamoto #include<bits/stdc++.h> #define R register #define inline __inl ...

  4. luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap

    好题. Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in&quo ...

  5. 【LG5055】可持久化文艺平衡树

    [LG5055]可持久化文艺平衡树 题面 洛谷 题解 终于不可以用\(Trie\)水了... 和普通的\(FHQ\;treap\)差不多 注意一下\(pushdown\).\(split\)要新开节点 ...

  6. BZOJ3223文艺平衡树——非旋转treap

    此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  7. [BZOJ3223]文艺平衡树 无旋Treap

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...

  8. LG5055 【模板】可持久化文艺平衡树

    题意 您需要写一种数据结构,来维护一个序列,其中需要提供以下操作(对于各个以往的历史版本): 在第 pp 个数后插入数 xx . 删除第 pp 个数. 翻转区间 [l,r][l,r],例如原序列是 { ...

  9. Luogu5055 【模板】可持久化文艺平衡树(fhq-treap)

    注意下传标记时也需要新建节点.空间开的尽量大. #include<iostream> #include<cstdio> #include<cmath> #inclu ...

随机推荐

  1. IOS - UTF-8转码问题

    2016.07.06 21:45* 字数 61 阅读 921评论 0喜欢 2 IOS中提供的转码. [utf8str stringByAddingPercentEscapesUsingEncoding ...

  2. Podfile语法参考(译)

    https://www.jianshu.com/p/8af475c4f717 2015.10.30 19:14* 字数 2496 阅读 35976评论 9喜欢 120 本文翻译自官方的Podfile ...

  3. 网络七层模型及TCP、UDP,一次HTTP请求都发生了什么

    一.七层网络模型 http协议运行在应用层   二.TCP-UDP TCP.UDP协议的区别 一次Http 请求,这个过程都发生了什么 TCP 协议如何保证可靠传输 HTTP和HTTPS的区别 TCP ...

  4. [2017BUAA软工助教]常见问题Q&A

    软工常见问题Q&A 目录: 1. 转会相关 1.1 转会流程是什么样子的? 1.2 团队中多人要求转会怎么办?(如何解散团队) 1.3 为什么有人想要转会? 1.4 软件工程课为什么有这一环节 ...

  5. vue路由动态过渡效果

    不多说,直接上代码 import Vue from 'vue' //引入vue import VueRouter from 'vue-router' //引入路由 Vue.use(VueRouter) ...

  6. oracle创建视图时一些问题

    这几天创建视图的时候,遇见的问题. 一:创建视图的时候Oracle-报错:文字与格式字符串不匹配(ORA-01861) 我创建的时候用的 是to_date 然后我改成了to_char select X ...

  7. vue实现双向数据绑定之Object.defineProperty()篇

    前言 vue.js中使用ES5的Object.defineProperty()实现数据的双向绑定 Object.defineProperty()原理 Object.defineProperty()可以 ...

  8. java日志框架之logback(一)——logback工程简介

    Logback工程 致力于成为log4j工程的继承者 Logback的架构足够泛型化,故能够应用于许多不同的环境.当前,logback划分为三个组件: logback-core logback-cla ...

  9. django之路由层

    一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...

  10. python学习笔记(5)-time库的使用

    import time 一.时间获取函数 time(), ctime(),gmtime() >>> import time >>> time.time() 1524 ...