文艺平衡树(luogu)

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)的更多相关文章

  1. P3391 【模板】文艺平衡树(Splay)新板子

    P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...

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

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

  3. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2202  Solved: 1226[Submit][Sta ...

  4. 洛谷 P3391 【模板】文艺平衡树(Splay)

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

  5. 洛谷 P3391【模板】文艺平衡树(Splay)

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

  6. 文艺平衡树(Splay)

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

  7. 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)

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

  8. P3391 文艺平衡树(Splay)

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

  9. 普通平衡树与文艺平衡树的splay代码

    主要综合借鉴了yyb和马前卒两位大佬的. //普通平衡树 #include <cstdio> #include <cctype> #include <cstring> ...

  10. 【模板】文艺平衡树(Splay) 区间翻转 BZOJ 3223

    您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 N,M<= ...

随机推荐

  1. codeforces 86D,Powerful array 莫队

    传送门:https://codeforces.com/contest/86/problem/D 题意: 给你n个数,m次询问,每次询问问你在区间l,r内每个数字出现的次数的平方于当前这个数的乘积的和 ...

  2. selenium docs

    Note to the Reader - Docs Being Revised for Selenium 2.0! Introduction Test Automation for Web Appli ...

  3. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  4. 使用Git和Github来管理自己的代码和笔记

    一.Github注册 1.先注册github.com的账号,官方网站: https://github.com/ 2.登录 3.创建仓库,仓库分公开的和私有的,公开的是免费的,私有的是收费的.我现在创建 ...

  5. vs指定QT的工作目录(依赖第三方动态库时,这时vs编译出来后,运行会提示缺少动态库)good

    当一个工程依赖第三方动态库时,这时vs编译出来后,运行会提示缺少动态库.解决方法: 项目->属性->调试: 工作目录:指定程序运行时的目录 环境:指定程序运行时的环境变量 我们可以在环境变 ...

  6. ES的索引查询和删除

    postman 1.查看es状态 get http://127.0.0.1:9200/_cat/health 红色表示数据不可用,黄色表示数据可用,部分副本没有分配,绿色表示一切正常 2.查看所有索引 ...

  7. 本地项目推送到coding

      当我们本地新建了一个项目,需要放到coding上维护时,按照下面步骤即可做到. 1.先在coding上新建一个项目,并完成初始化. 2.进入到本地项目的目录下 //初始化本地仓库 a:git in ...

  8. 【记录】.bin文件 到 .vdi文件的转换教程

    .bin文件 到 .vdi文件的转换教程 1. 背景 想体验一下 Chrome OS 系统,于是准备在 虚拟机VirtualBox(Mac版) 中安装一下,网上教程非常少,找到如下教程 原贴地址:ht ...

  9. C# 数独求解算法。

    前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法.不幸的是这种方法经常出现填到一半才发现有单元格无数可填 ...

  10. Theia APIs——通过JSON-RPC进行通信

    上一篇:Theia APIs——事件 通过JSON-PRC进行通信 在本节中,我将讲解如何创建后端服务并通过JSON-PRC来连接它. 我将使用debug logging system作为例子来进行讲 ...