P3391 【模板】文艺平衡树
题目
题目
思路
FHQtreap板子,直接上代码
code:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstdlib>
using namespace std;
inline int read()
{int ret,c,f=1;while (((c=getchar())> '9'||c< '0')&&c!='-');if (c=='-') f=-1,ret=0;else ret=c-'0';while ((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';return ret*f;
}
struct f{int val,key,l,r,siz,lazy;//真值,权值,左右儿子,子树大小,特殊标记这里指翻转
} tree[1000006];
int cnt,n,m,root;
void New(int x)//建新点,传真值
{tree[++cnt].val=x;tree[cnt].key=rand();tree[cnt].l=tree[cnt].r=0;tree[cnt].siz=1;tree[cnt].lazy=0;return;
}
void down(int id)//标记下传
{tree[tree[id].l].lazy^=1;tree[tree[id].r].lazy^=1;swap(tree[id].l,tree[id].r);tree[id].lazy=0;return;
}
void up(int id)//上传
{tree[id].siz=tree[tree[id].l].siz+tree[tree[id].r].siz+1; return;
}
void split(int id,int siz,int &l,int &r)//分裂,把从1开始长度为siz的部分拆出来
{if (id==0){l=r=0;return;}if (tree[id].lazy) down(id);if (siz>=tree[tree[id].l].siz+1)//递归左儿子 {l=id;split(tree[id].r,siz-1-tree[tree[id].l].siz,tree[id].r,r);}else//递归右儿子 {r=id;split(tree[id].l,siz,l,tree[id].l);}up(id);return;
}
int merge(int l,int r)//合并,传入根节点编号
{if (l==0||r==0){return l+r;}if (tree[l].key<tree[r].key)//维护小根堆性质{if (tree[l].lazy) down(l);tree[l].r=merge(tree[l].r,r);up(l);return l;}else{if (tree[r].lazy) down(r);tree[r].l=merge(l,tree[r].l);up(r);return r;}
}
void build(int n)//建树
{for (int i=1;i<=n;i++){New(i);root=merge(root,cnt);}return;
}
void print(int id)//中序遍历
{if (tree[id].lazy) down(id);if (tree[id].l) print(tree[id].l);cout<<tree[id].val<<' ';if (tree[id].r) print(tree[id].r);return;
}
int main()
{n=read(),m=read();build(n);while (m--){int x=read(),y=read(),z,l,r;split(root,y,l,r);split(l,x-1,l,z);tree[z].lazy^=1;root=merge(merge(l,z),r);}print(root);return 0;
}
P3391 【模板】文艺平衡树相关推荐
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...
- fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...
题面: [模板]文艺平衡树(Splay) 题解:无 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostr ...
- 洛谷 P3391 【模板】文艺平衡树
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...
- P5055 【模板】可持久化文艺平衡树
P5055 [模板]可持久化文艺平衡树 突然发现fhq_treap也是可以支持区间翻转的,所以基本上和其他平衡树是一样的,而且还满足重量平衡树的性质,真是太优秀了,只不过常数稍微比较大. 然后这里我们 ...
- BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6881 Solved: 4213 [Submit][S ...
- luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap
luoguP5055 [模板]可持久化文艺平衡树 可持久化非旋转treap 好题. Code: #include<bits/stdc++.h> using namespace std; # ...
- P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
P5055 [模板]可持久化文艺平衡树 链接 luogu 思路 可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久.以前以为很难一直没看,就是个板 ...
- 【luogu P5055】【模板】可持久化文艺平衡树
[模板]可持久化文艺平衡树 题目链接:luogu P5055 题目大意 要你维护插入,删除,区间翻转,区间求和. 但要求可持续化,即每次操作在一个历史版本上进行,且会产生一个新的历史版本 思路 看到题 ...
- 2021 第十二届 蓝桥杯 双向排序 题解 栈+文艺平衡树
2021 第十二届蓝桥杯 双向排序 题解 栈+文艺平衡树 题目描述 思路 实现方法 代码 只用栈 只用栈的代码 题目描述 原题链接:https://www.lanqiao.cn/problems/14 ...
- 文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
最新文章
- 使用 AFNetworking 进行 XML 和 JSON 数据请求
- python 自动化微信小程序_appium+python自动化56-微信小程序自动化(摩拜为例)
- Linux端日志加密,Linux学习--第十三天--日志、系统运行级别、grub加密
- C# WinForm开发系列 - TextBox
- [Android] android的消息队列机制
- 更新系统时跳过某个软件包
- 文献学习(part80-B)--Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
- Android开发之RecyclerView嵌套ListView自动计算高度的方法
- webpack最新版本_webpack小结-开发环境构建优化
- DML,DDL,DCL,DQL的区别
- 6.FreeRTOS学习笔记-信号量
- java调用cmd_Java调用CMD命令
- RuoYiConfig中加入自定义属性值获取不到解决办法?
- React Router学习
- Android系统中震动功能的测试
- Tomcat的下载及环境变量配置
- Mac上Gtk-WARNING **: cannot open display解决
- JavaScript js 实现拖动窗口移动功能
- Test meeting 11.23
- Python 计算思维训练——公式计算