3223: Tyvj 1729 文艺平衡树

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 3700  Solved: 2097
[Submit][Status][Discuss]

Description

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

Input

第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n)  m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n

Output

输出一行n个数字,表示原始序列经过m次变换后的结果

Sample Input

5 3

1 3

1 3

1 4

Sample Output

4 3 2 1 5

HINT

N,M<=100000

抄了抄模板,自己yy不出来

区间操作

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100010
int n,m,root;
int size[N],fa[N],tag[N];
int child[N][];
void update(int x)
{
size[x]=size[child[x][]]+size[child[x][]]+;
}
void zig(int x)
{
int y=fa[x];
fa[x]=fa[y];
child[fa[x]][y==child[fa[x]][]]=x;
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
update(x); update(y);
}
void zag(int x)
{
int y=fa[x];
// printf("----------------\n");
// printf("fa[x]=%d\n",fa[x]);
fa[x]=fa[y]; child[fa[x]][y==child[fa[x]][]]=x;
// printf("x=%d\n",x);
// printf("fa[x]=%d\n",fa[x]);
// printf("----------------\n");
fa[child[x][]]=y; child[y][]=child[x][];
fa[y]=x; child[x][]=y;
update(x); update(y);
}
void splay(int x,int t)
{
int a=fa[t];
while(fa[x]!=a)
{
int y=fa[x],z=fa[y];
if(y==t)
{
child[t][]==x?zig(x):zag(x);
break;
}
x==child[y][]?zig(x):zag(x);
x==child[z][]?zig(x):zag(x);
update(x);
}
if(!fa[x]) root=x;
update(root);
}
void pushdown(int x)
{
if(tag[x])
{
swap(child[x][],child[x][]);
tag[child[x][]]^=;
tag[child[x][]]^=;
tag[x]^=;
}
}
int find(int x,int rank)
{
pushdown(x);
// printf("x=%d rank=%d\n",x,rank);
if(size[child[x][]]+==rank) return x;
else if(size[child[x][]]>=rank) return find(child[x][],rank);
else return find(child[x][],rank-size[child[x][]]-);
}
void turn(int a,int b)
{
int x=find(root,a-),y=find(root,b+);
splay(x,root); splay(y,child[root][]);
tag[child[child[root][]][]]^=;
}
int main()
{
scanf("%d%d",&n,&m);
root=;
update();
for(int i=;i<=n+;i++)
{
fa[i]=i-;
child[i-][]=i;
update(i);
}
while(m--)
{
int a,b; scanf("%d%d",&a,&b);
a++; b++;
turn(a,b);
}
// printf("YES\n");
// printf("root=%d\n",root);
for(int i=;i<=n+;i++)
{
// printf("\n----------------\n");
printf("%d ",find(root,i)-);
}
return ;
}

bzoj3223的更多相关文章

  1. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  2. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

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

  3. bzoj3223 文艺平衡树

    传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223 splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀) #include & ...

  4. bzoj3223 文艺平衡树 (treap or splay分裂+合并)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3313  Solved: 1883 [Submit][S ...

  5. BZOJ3223——Tyvj 1729 文艺平衡树

    1.题目大意:维护序列,只有区间翻转这个操作 2.分析:splay的经典操作就是实现区间翻转,就是在splay中有一个标记,表示这个区间被翻转了 然后就是记得各种的操作访问某个点时,记得下传,顺便交换 ...

  6. 【BZOJ3223】 Tyvj 1729 文艺平衡树 Splay

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

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

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

  8. BZOJ3223/洛谷P3391 - 文艺平衡树

    BZOJ链接 洛谷链接 题意 模板题啦~2 代码 //文艺平衡树 #include <cstdio> #include <algorithm> using namespace ...

  9. 【BZOJ3223】文艺平衡树(Splay)

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

随机推荐

  1. SHA-256算法

    SHA-.h #ifndef _SHA_256_H #define _SHA_256_H #include<iostream> using namespace std; typedef u ...

  2. Linux安装jdk

    查看Java的版本命令:java -version 查看java版本的方法是:运行--->cmd,输入java –version.注意: java命令后是有个空格的,-version表示参数而已 ...

  3. 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活

    参考文章: 1.SuperIO通讯框架介绍,含通信本质 2.C#跨平台物联网通讯框架ServerSuperIO(SSIO) 一.感慨 上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就 ...

  4. GJM : Unity3D HIAR -【 快速入门 】 四、创建 Hello World

    创建 Hello World 本文将介绍如何在 Windows 系统下,使用 HiAR SDK 创建一个简单的 AR 应用.在开始之前,请先完成下列准备工作: 注册 HiAR 帐户 获取 AppKey ...

  5. SpringMVC类型转换器、属性编辑器

    对于MVC框架,参数绑定一直觉得是很神奇很方便的一个东西,在参数绑定的过程中利用了属性编辑器.类型转换器 参数绑定流程 参数绑定:把请求中的数据,转化成指定类型的对象,交给处理请求的方法 请求进入到D ...

  6. Android Weekly Notes Issue #225

    Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...

  7. IOS 杂笔-9 (MD5 加密)

    首先是一段对MD5的简介 *出自一位大牛之手* Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护 ...

  8. C# 在Repeater 的ItemDataBound 如何转换e.Item.DataItem 的类型

    1.使用DataSet和DataTable绑定数据源时,用 DataRowView view = (DataRowView)e.Item.DataItem; 2.DataReader绑定数据源时,用 ...

  9. [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  10. 如何在mac上用终端打开XAMPP自带的MySQL

    注:1.本文未经博主同意,不得转载! 2.所有终端语句都分行显示,以免大家看错: 直接开始,过程中对每一步可能出现的错误都进行了说明. 1.安装好xampp,然后打开终端,输入: mysql -u r ...