P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
P5055 【模板】可持久化文艺平衡树
链接
思路
可持久化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);
else
y=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;
}
P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap的更多相关文章
- 洛谷P5055 可持久化文艺平衡树 (可持久化treap)
题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护 ...
- 【模板】可持久化文艺平衡树-可持久化treap
题目链接 题意 对于各个以往的历史版本实现以下操作: 在第 p 个数后插入数 x . 删除第 p 个数. 翻转区间 [l,r],例如原序列是 \(\{5,4,3,2,1\}\),翻转区间 [2,4] ...
- luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap
好题. Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in&quo ...
- 【LG5055】可持久化文艺平衡树
[LG5055]可持久化文艺平衡树 题面 洛谷 题解 终于不可以用\(Trie\)水了... 和普通的\(FHQ\;treap\)差不多 注意一下\(pushdown\).\(split\)要新开节点 ...
- 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)
题面 传送门 题解 日常敲板子.jpg //minamoto #include<bits/stdc++.h> #define R register #define inline __inl ...
- LG5055 【模板】可持久化文艺平衡树
题意 您需要写一种数据结构,来维护一个序列,其中需要提供以下操作(对于各个以往的历史版本): 在第 pp 个数后插入数 xx . 删除第 pp 个数. 翻转区间 [l,r][l,r],例如原序列是 { ...
- Luogu5055 【模板】可持久化文艺平衡树(fhq-treap)
注意下传标记时也需要新建节点.空间开的尽量大. #include<iostream> #include<cstdio> #include<cmath> #inclu ...
- SLT学习——leafes tree扩展 【文艺平衡树】
这是一个全新的数据结构 md,别看这篇文章了,这篇已经废了. 百折不饶,再交一次,更新复杂度证明 这里是HYF,蒟蒻一只,最近因某些原因开始学数据结构了,然后就写了这篇题解. 下面给大家介绍一个全新的 ...
- Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)
题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...
随机推荐
- C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据
1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: ...
- C# 手写将对象转换为Json方法
一.需求场景 (1)不能用JavaScriptSerializer.DataContractJsonSerializer.Newtonsoft.Json这些写好的方法,需要自己写方法. (2)转化的类 ...
- pandas-16 pd.merge()的用法
pandas-16 pd.merge()的用法 使用过sql语言的话,一定对join,left join, right join等非常熟悉,在pandas中,merge的作用也非常类似. 如:pd.m ...
- 另类WebShell监测机制--基于auditd
鸣 谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...
- Django下JWT的使用
前言 JWT 是 json web token 的缩写, token的作用你应该已经了解,用于识别用户身份避免每次请求都需要验证 用来解决前后端分离时的用户身份验证 在传统的web项目中 我们会在fo ...
- Redhat6.5安装oracle11g
Redhat6.5安装oracle11g 一. 安装环境 linux服务器:Redhat 6.5 64位 oracle版本:oracle11gR2 远程windows服务器:已安装Xmanage ...
- Apache/Nginx的web网页访问加密
- 将Quartz.NET集成到 Castle中
原文:https://cloud.tencent.com/developer/article/1030346 Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB ...
- position 的absolute会使display变成inline-block
position:absolute和float会隐式地改变display类型,不论之前什么类型的元素(display:none除外), 只要设置了position:absolute. float中任意 ...
- Codeforces A. Kyoya and Colored Balls(分步组合)
题目描述: Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ...