题目描述

小奇成功打开了大科学家的电脑。
大科学家打算前往n处景点旅游,他用一个序列来维护它们之间的顺序。初
始时,序列为1,2,...,n。
接着,大科学家进行m次操作来打乱顺序。每次操作有6步:
1、从序列开头(左端)取出A个数(此时序列剩下n-A个数)
2、从序列开头取出B个数
3、将第1步取出的A个数按原顺序放回序列开头
4、从序列开头取出C个数
5、将第2步取出的B个数逆序放回序列开头
6、将第4步取出的C个数按原顺序放回序列开头
你需要求出最终序列。

输入

第一行两个数n,m。接下来m行,每行三个数A,B,C。
n,m<=100000

输出

输出一行n个数表示最终序列。

样例输入

10 2
6 2 2
5 3 6

样例输出

1 2 8 7 3 9 6 5 4 10
 
非旋转treap模板题,直接按题意操作就好了,输出时直接dfs一遍整棵treap,注意不要忘记下传旋转标记。

#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int r[100010];
int ls[100010];
int rs[100010];
int size[100010];
int v[100010];
int s[100010];
int cnt;
int n,m;
int A,B,C;
int x,y,z;
int root;
inline int build(int x)
{
int rt=++cnt;
v[rt]=x;
r[rt]=rand();
size[rt]=1;
return rt;
}
inline void pushup(int rt)
{
size[rt]=size[ls[rt]]+size[rs[rt]]+1;
}
inline void pushdown(int rt)
{
if(s[rt])
{
s[rt]^=1;
s[ls[rt]]^=1;
s[rs[rt]]^=1;
swap(ls[rt],rs[rt]);
}
}
inline void split(int rt,int &x,int &y,int k)
{
if(!rt)
{
x=y=0;
return ;
}
pushdown(rt);
if(size[ls[rt]]>=k)
{
y=rt;
split(ls[rt],x,ls[y],k);
pushup(rt);
}
else
{
x=rt;
split(rs[rt],rs[x],y,k-size[ls[rt]]-1);
pushup(rt);
}
}
inline int merge(int x,int y)
{
if(!x||!y)
{
return x+y;
}
pushdown(x);
pushdown(y);
if(r[x]<r[y])
{
rs[x]=merge(rs[x],y);
pushup(x);
return x;
}
else
{
ls[y]=merge(x,ls[y]);
pushup(y);
return y;
}
}
inline int build(int l,int r)
{
if(l==r)
{
return build(l);
}
int mid=(l+r)>>1;
return merge(build(l,mid),build(mid+1,r));
}
inline void print(int rt)
{
pushdown(rt);
if(ls[rt])
{
print(ls[rt]);
}
printf("%d ",v[rt]);
if(rs[rt])
{
print(rs[rt]);
}
}
int main()
{
srand(12378);
scanf("%d%d",&n,&m);
root=build(1,n);
while(m--)
{
scanf("%d%d%d",&A,&B,&C);
split(root,x,y,A);
split(y,y,z,B);
s[y]^=1;
x=merge(x,z);
split(x,x,z,C);
root=merge(merge(x,y),z);
}
print(root);
}

BZOJ5063旅游——非旋转treap的更多相关文章

  1. [bzoj3173]最长上升子序列_非旋转Treap

    最长上升子序列 bzoj-3173 题目大意:有1-n,n个数,第i次操作是将i加入到原有序列中制定的位置,后查询当前序列中最长上升子序列长度. 注释:1<=n<=10,000,开始序列为 ...

  2. 关于非旋转treap的学习

    非旋转treap的操作基于split和merge操作,其余操作和普通平衡树一样,复杂度保证方式与旋转treap差不多,都是基于一个随机的参数,这样构出的树树高为\(logn\) split 作用:将原 ...

  3. [Codeforces702F]T-Shirts——非旋转treap+贪心

    题目链接: Codeforces702F 题目大意:有$n$种T恤,每种有一个价格$c_{i}$和品质$q_{i}$且每种数量无限.现在有$m$个人,第$i$个人有$v_{i}$元,每人每次会买他能买 ...

  4. BZOJ3223文艺平衡树——非旋转treap

    此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  5. BZOJ3224普通平衡树——非旋转treap

    题目: 此为平衡树系列第一道:普通平衡树您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数, ...

  6. [NOIP]2017列队——旋转treap/非旋转treap

    Sylvia 是一个热爱学习的女孩子.  前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m.  为了便 ...

  7. BZOJ3729Gty的游戏——阶梯博弈+巴什博弈+非旋转treap(平衡树动态维护dfs序)

    题目描述 某一天gty在与他的妹子玩游戏.妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略.gt ...

  8. BZOJ1552[Cerc2007]robotic sort&BZOJ3506[Cqoi2014]排序机械臂——非旋转treap

    题目描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000. 第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. 输出 输出共一行,N个用空格隔开 ...

  9. BZOJ1251序列终结者——非旋转treap

    题目描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技 ...

随机推荐

  1. 快看Sample代码,速学Swift语言(3)-运算符

    运算符是用来检查,更改或组合值的特殊符号或短语.Swift提供的很多常规的运算符,如+.-.*./.%.=.==等,以及逻辑运算的&&.||等等,基本上不需要重复介绍,我们在这里只需要 ...

  2. MVC简单用户登录授权认证

    1.控制器上面用 [Authorize] 属性标识,表示当前控制器内的所有函数需要用户认证才能访问 2.函数上面用 [AllowAnonymous] 属性标识,表示当前函数不需要用户认证可以直接访问 ...

  3. immutability因React官方出镜之使用总结分享!

    作者:首席填坑官∙苏南 公众号:honeyBadger8,群:912594095,本文原创,著作权归作者所有,转载请注明原链接及出处. 引言 之前项目中遇到数据拷贝.引用之间数据层级嵌套过深,拷贝的值 ...

  4. 关于function和task的说明

    1.  关于函数function调用,总结两个要点: 1.  函数调用一般产生一个值,这个值被赋值给某个变量 2.  函数所返回的值只能是一个,不可以是多个,不能像C语言中采用指针的方式返回多个值.因 ...

  5. UnderWater+SDN论文之四

    Open Source Suites for Underwater Networking:WOSS and DESERT Underwater Source: IEEE Network, 2014 仿 ...

  6. CodeIgniter框架中尝试使用swoole

    ci框架版本:3.1.7.     swoole版本:1.7.      php版本:5.6 相关文档: 以cli方式运行ci框架 swoole官方手册 创建一个TestSwoole和Hello控制器 ...

  7. mysql问题汇总——持续更新

    1.this is incompatible with sql_mode=only_full_group_by set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_ ...

  8. webdriver原理、协议

    1.webdriver client的原理是什么? 当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器.如果测试脚本指定了firefox ...

  9. Jquery 选择器 特殊字符 转义字符

    1.Jquery   选择器 id包含特殊字符,加双斜线 \\ 例 <input type="text" id="dbo_HouseInfo.HouseResour ...

  10. git fetch 和git pull 的差别

    1.git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令: git fetch orgin master //将远程仓库的master分支下载到本地当前branch中 git ...