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

链接

luogu

思路

可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久。以前以为很难一直没看,就是个板子。

错误

t[++num].sum=x;t[num].val=x;
t[++num].sum=t[num].val=x;

这两句话居然不一样。
我靠我靠我靠,调试了一下午。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=2e5+7;
ll read() {ll x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
namespace fhq_treap {#define ls t[u].ch[0]#define rs t[u].ch[1]int num;struct node {int ch[2],siz,pri,lazy;ll val,sum;}t[_*80];int make_node(ll x) {t[++num].sum=x;t[num].val=x;t[num].pri=rand(),t[num].siz=1;return num;}void pushup(int u) {t[u].siz=t[ls].siz+t[rs].siz+1;t[u].sum=t[ls].sum+t[rs].sum+t[u].val;}int copy_node(int u) {t[++num]=t[u];return num;}void pushdown(int u) {if(t[u].lazy) {if(ls) ls=copy_node(ls);if(rs) rs=copy_node(rs);if(ls) t[ls].lazy^=1;if(rs) t[rs].lazy^=1;swap(ls,rs);t[u].lazy^=1;}}int merge(int x,int y) {if(!x||!y) return x+y;pushdown(x),pushdown(y);if(t[x].pri<t[y].pri) {t[x].ch[1]=merge(t[x].ch[1],y);pushup(x);return x;} else {t[y].ch[0]=merge(x,t[y].ch[0]);pushup(y);return y;}   }void split(int u,int k,int &x,int &y) {if(!u) x=y=0;else {pushdown(u);u=copy_node(u);if(t[ls].siz+1<=k)x=u,split(rs,k-t[ls].siz-1,t[x].ch[1],y);elsey=u,split(ls,k,x,t[y].ch[0]);pushup(u);}}
}
using namespace fhq_treap;
int rt[_];
int main() {srand(19260817); int T=read();ll lastans=0;for(int i=1;i<=T;++i) {int super_cool=read(),opt=read(),x,y,z;if(opt==1) {ll p=read()^lastans,v=read()^lastans;split(rt[super_cool],p,x,y);rt[i]=merge(merge(x,make_node(v)),y);} else if(opt==2) {ll p=read()^lastans;split(rt[super_cool],p,x,z);split(x,p-1,x,y);rt[i]=merge(x,z);} else if(opt==3) {ll l=read()^lastans,r=read()^lastans;split(rt[super_cool],r,x,z);split(x,l-1,x,y);t[y].lazy^=1;rt[i]=merge(merge(x,y),z);} else {ll l=read()^lastans,r=read()^lastans;split(rt[super_cool],r,x,z);split(x,l-1,x,y);printf("%lld\n",lastans=t[y].sum);rt[i]=merge(merge(x,y),z);}}return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/11228084.html

P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap相关推荐

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

    luoguP5055 [模板]可持久化文艺平衡树 可持久化非旋转treap 好题. Code: #include<bits/stdc++.h> using namespace std; # ...

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

    P5055 [模板]可持久化文艺平衡树 突然发现fhq_treap也是可以支持区间翻转的,所以基本上和其他平衡树是一样的,而且还满足重量平衡树的性质,真是太优秀了,只不过常数稍微比较大. 然后这里我们 ...

  3. 【luogu P5055】【模板】可持久化文艺平衡树

    [模板]可持久化文艺平衡树 题目链接:luogu P5055 题目大意 要你维护插入,删除,区间翻转,区间求和. 但要求可持续化,即每次操作在一个历史版本上进行,且会产生一个新的历史版本 思路 看到题 ...

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

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

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

    DescriptionDescriptionDescription 写一种数据结构,要求支持插入,删除,查询区间和,区间翻转且可持久化 SolutionSolutionSolution 无旋Treap ...

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

    题面 https://www.luogu.org/problem/P5055 题解 #include<cstdio> #include<iostream> #include&l ...

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

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

  8. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...

    题面: [模板]文艺平衡树(Splay) 题解:无 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostr ...

  9. 洛谷 P3391 【模板】文艺平衡树

    题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...

最新文章

  1. 计算机系教研工作计划,计算机教研室工作计划怎么写
  2. vue.js中mock本地json数据
  3. Android侧滑删除-RecyclerView轻松实现高效的侧滑菜单
  4. USACO-Section1.4 Prime Cryptarithm (搜索)
  5. 下面我这个方法可以实现限制某些QQ号登陆,而没有被限制的QQ号可以登陆,不需要借助任何工具。...
  6. Python学习笔记:藉由私有属性实现封装
  7. 95-080-046-源码-启动-flink-daemon.sh
  8. 485通讯协议_HART协议和RS485协议有什么区别?
  9. html中怎么修改黑体,css怎样设置黑体?
  10. Spring注解的使用和区别:@Component、@Service、@Repository、@Controller
  11. python dataframe将字符转换为数字_python中如何将华氏温度转换为摄氏温度?
  12. myBatis + SpringMVC上传、下载文件
  13. 使用 tinypng 进行批量压缩
  14. 23、Camunda DMN决策初探
  15. matlab列主元消去法求逆矩阵,Gauss-Jordan列主元消元法求逆矩阵
  16. 电脑一启动吃鸡就重启计算机,玩吃鸡老是重启电脑
  17. java是怎么分配内存和释放内存的-详解
  18. ECS(Entity-Component-System)是什么?
  19. 苹果手机黑屏怎么办,苹果手机不能开机怎么办
  20. Windows下安装igraph

热门文章

  1. 入门级带你实现一个安卓智能家居APP(2)kotlin版本
  2. 想学CNC编程的一定要看过来~
  3. 纯CSS 毛玻璃效果
  4. springboot整合redisson实现分布式锁
  5. 三步走,教你高效管理好团队
  6. 中级的“信息系统管理工程师”、“系统集成项目管理工程师”和高级的“信息系统项目管理师”有什么区别?
  7. Objective-C中的instancetype和id区别
  8. 冈萨雷斯《数字图像处理matlab版》(一):绪言
  9. 单词caement水泥英语
  10. C++ 魔兽世界之二:装备