文艺平衡树(区间splay)
Description
题目描述
您需要写一种数据结构(可参考题目标题),来维护一个有序数列。
其中需要提供以下操作:翻转一个区间,例如原有序序列是 5\ 4\ 3\ 2\ 15 4 3 2 1,翻转区间是 [2,4][2,4] 的话,结果是 5\ 2\ 3\ 4\ 15 2 3 4 1。
输入格式
第一行两个正整数 n,mn,m,表示序列长度与操作个数。序列中第 ii 项初始为 ii。
接下来 mm 行,每行两个正整数 l,rl,r,表示翻转的区间。
输出格式
输出一行 nn 个正整数,表示原始序列经过 mm 次变换后的结果。
Code
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int N=,inf=;
int sum,n,root,m,l,r,d[N],fa[N],size[N],s[N][],v[N],tag[N];
inline int which(int x)
{
return x==s[fa[x]][]?:;
}
inline void push_up(int g)
{
if(g){
size[g]=;
if(s[g][]) size[g]+=size[s[g][]];
if(s[g][]) size[g]+=size[s[g][]];
}
}
void built(int l,int r,int &g)
{
if(l>r) return ;
g=++sum;
size[g]=;
int mid=(l+r)>>;
v[g]=d[mid];
built(l,mid-,s[g][]);
built(mid+,r,s[g][]);
fa[s[g][]]=fa[s[g][]]=g;
push_up(g);
}
inline void push_down(int g)
{
if(g && tag[g]){
tag[s[g][]]^=,tag[s[g][]]^=;
swap(s[g][],s[g][]),tag[g]=;
}
}
inline int find(int x)
{
int now=root;
while()
{
push_down(now);
if(size[s[now][]]>=x) now=s[now][];
else
{
x-=size[s[now][]]+;
if(x>) now=s[now][];
else return now;
}
}
}
inline void rotate(int x)
{
int f=fa[x],oldf=fa[f];
push_down(f),push_down(x);
int w=which(x),ww=which(f);
s[f][w]=s[x][w^];
fa[s[x][w^]]=f;
fa[f]=x,fa[x]=oldf;
s[x][w^]=f;
if(oldf) s[oldf][s[oldf][]==f]=x;
push_up(f),push_up(x);
}
inline void splay(int x,int g)
{
for(int i;(i=fa[x])!=g;rotate(x))
if(fa[i]!=g) rotate(which(i)==which(x)?i:x);
if(g==) root=x;
}
inline void re(int l,int r)
{
l=find(l-),r=find(r+);
splay(l,),splay(r,l);
int pos=s[s[root][]][];
tag[pos]^=;
}
void dfs(int x)
{
push_down(x);
if(s[x][]) dfs(s[x][]);
if(v[x]!=-inf && v[x]!=inf) printf("%d ",v[x]);
if(s[x][]) dfs(s[x][]);
}
int main()
{
scanf("%d%d",&n,&m);
d[]=-inf,d[n+]=inf;
for(int i=;i<=n;i++) d[i+]=i;
built(,n+,root);
for(int i=;i<m;i++)
{
scanf("%d%d",&l,&r);
re(l+,r+);
}
dfs(root);
return ;
}
文艺平衡树(区间splay)的更多相关文章
- P3391 【模板】文艺平衡树(Splay)新板子
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)
题面: [模板]文艺平衡树(Splay) 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- 洛谷 P3391 【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 洛谷 P3391【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- P3391 文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- 普通平衡树与文艺平衡树的splay代码
主要综合借鉴了yyb和马前卒两位大佬的. //普通平衡树 #include <cstdio> #include <cctype> #include <cstring> ...
- 【模板】文艺平衡树(Splay) 区间翻转 BZOJ 3223
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 N,M<= ...
随机推荐
- mac笔记本安装Android sdk
一.先下载android sdk for mac 给二个靠谱的网址: a). http://down.tech.sina.com.cn/page/45703.html b). http://mac ...
- Python自定义函数的参数
在Python中自定义的函数可以有三类不同的参数 formal parameters positional arguments Keyword Arguments When a final forma ...
- python 处理xml文件
需求 在实际应用中,需要对xml配置文件进行实时修改, 1.增加.删除 某些节点 2.增加,删除,修改某个节点下的某些属性 3.增加,删除,修改某些节点的文本 <annotation> & ...
- Redis安装(单机及各类集群,阿里云)
Redis安装(单机及各类集群,阿里云) 前言 上周,我朋友突然悄悄咪咪地指着手机上的一篇博客说,这是你的博客吧.我看了一眼,是之前发布的<Rabbit安装(单机及集群,阿里云>.我朋友很 ...
- WWDC2018 之 优化 App Assets Optimizing App Assets
该篇博客记录了观看WWDC Session227<Optimizing App Assets>的内容以及一些理解. 引言 该session主要讲述了使用Assets Catalog的新特性 ...
- MongoDB not authorized for query - code 13 错误解决办法
跟着教程走完到了鉴权阶段,不加 --auth 登陆正常,但会出现warning :没有鉴权,修改不会生效,此时登陆正常. 但是加上了--auth 启动之后加上密码登陆则无法登陆. 添加用户和鉴权: 先 ...
- 机器学习- Numpy基础 吐血整理
Numpy是专门为数据科学或者数据处理相关的需求设计的一个高效的组件.听起来是不是挺绕口的,其实简单来说就2个方面,一是Numpy是专门处理数据的,二是Numpy在处理数据方面很牛逼(肯定比Pytho ...
- 前端Tips#2 - 将 arguments 转换成Array的最佳实践
本文同步自 JSCON简时空 - 技术博客,点击阅读 视频讲解 文字讲解 1.先讲结论 有很多种方式将 arguments 转换成数组,那么哪一种方式是最优的? 为节约大伙儿的时间,这里先说一下结论: ...
- GraphicsLab Project之Diffuse Irradiance Environment Map
作者:i_dovelemon 日期:2020-01-04 主题:Rendering Equation,Irradiance Environment Map,Spherical Harmonic 引言 ...
- 洛谷P4141 消失之物 题解 背包问题扩展
题目链接:https://www.luogu.com.cn/problem/P4141 题目大意: 有 \(n\) 件物品,求第 \(i\) 件物品不能选的时候(\(i\) 从 \(1\) 到 \(n ...