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

Source

区间翻转,注意kth时和标记时下方标记,没了。
 #include <cstdio>
#include <iostream>
#define N 100100
using namespace std;
struct SplayNode
{
SplayNode *fa,*ch[];
SplayNode();
int data,num,size;
bool rev;
int chr() {return this==fa->ch[];}
void updata() {size=ch[]->size+ch[]->size+;}
void mark() {rev=rev^;}
void push()
{
if (rev)
{
rev=rev^;;
ch[]->mark();
ch[]->mark();
swap(ch[],ch[]);
}
}
}*null;
SplayNode::SplayNode() {fa=ch[]=ch[]=null; rev=; size=;}
int n,m;
int a[N];
namespace Splay
{
SplayNode *Root;
SplayNode *Build(int l,int r)
{
if (l>r) return null;
int mid=(l+r)>>;
SplayNode *R=new SplayNode;
R->data=a[mid];
R->ch[]=Build(l,mid-);
R->ch[]=Build(mid+,r);
R->ch[]->fa=R;
R->ch[]->fa=R;
R->updata();
return R;
}
void MakeTree()
{
null=new SplayNode;
*null=SplayNode();
Root=Build(,n);
}
void rotate(SplayNode *x)
{
SplayNode *r=x->fa;
if (r==null || x==null) return;
int t=x->chr();
r->ch[t]=x->ch[t^];
r->ch[t]->fa=r;
if (r->fa==null) Root=x;
else r->fa->ch[r->chr()]=x;
x->fa=r->fa;
x->ch[t^]=r;
r->fa=x;
x->updata();
r->updata();
}
void splay(SplayNode *x,SplayNode *y)
{
for (;x->fa!=y;rotate(x))
if (x->fa->fa!=y)
if (x->fa->chr()==x->chr()) rotate(x->fa);
else rotate(x);
}
SplayNode *Kth(int k)
{
SplayNode *r=Root;
if (k< || k>n) return null;
while (r!=null)
{
r->push();
if (k<=r->ch[]->size) r=r->ch[];
else if (k==r->ch[]->size+) return r;
else
{
k-=r->ch[]->size+;
r=r->ch[];
}
}
return null;
}
void reverse(int l,int r)
{
SplayNode *q=Kth(l-);
SplayNode *p=Kth(r+);
if (q==null && p==null)
{
Root->mark();
return;
}
if (q==null)
{
splay(p,null);
p->ch[]->mark();
return;
}
if (p==null)
{
splay(q,null);
q->ch[]->mark();
return;
}
q->push();
splay(q,null);
p->push();
splay(p,q);
p->ch[]->mark();
}
void dfs(SplayNode *x)
{
if (x==null) return;
x->push();
dfs(x->ch[]);
printf("%d ",x->data);
dfs(x->ch[]);
} }
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) a[i]=i;
Splay::MakeTree();
//Splay::dfs(Splay::Root);
// cout<<endl;
for (int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Splay::reverse(x,y);
// Splay::dfs(Splay::Root);
// cout<<endl;
}
Splay::dfs(Splay::Root);
return ;
}

【BZOJ3223】 Tyvj 1729 文艺平衡树 Splay的更多相关文章

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

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

  2. bzoj3223: Tyvj 1729 文艺平衡树 splay裸题

    splay区间翻转即可 /************************************************************** Problem: 3223 User: walf ...

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

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

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

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

  5. BZOJ 3223: Tyvj 1729 文艺平衡树(splay)

    速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...

  6. bzoj 3223: Tyvj 1729 文艺平衡树 (splay)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...

  7. BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

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

  8. 【Splay】bzoj3223 Tyvj 1729 文艺平衡树

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #i ...

  9. 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树

    让蒟蒻见识到了常数大+滥用STL的危害. <法一>很久之前的Splay #include<cstdio> #include<algorithm> using nam ...

随机推荐

  1. C++杂记

    变量就是一个地址,同进程内可以直接访问,要做好线程之间的同步就是了.——摘自CSDN 2015-06-18 16:58:10(注:注意变量的生命周期(作用域就可以不在意))

  2. Log4Net配置以及使用

    跟踪程序代码,及时发现程序的运行状态,是每个成熟的软件所必不可少的一个环节,网站发布到真实的环境之后,对于程序的运行状态,我们并不能想开发环境那也,点击调试.日志记录显示就尤为重要,在.NET中记录日 ...

  3. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  4. A-B 练习【大数减法举例】

      A-B Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/ ...

  5. 杂物 python (一)

    python 是一门语言,有各种不同的实现.CPython 即用c语言实现Python及其解释器.

  6. 在Asp.Net MVC中用Ajax回调后台方法

    在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...

  7. Arduino101学习笔记(四)—— 数字IO

    1.设置管脚模式 //***************************************************************************************** ...

  8. 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB

    稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上.因此我们需要有高效的稀疏矩阵存储格式.本文总结几种典型的格式:COO,CSR ...

  9. 滑动listview隐藏和显示顶部布局

    需求: 1.listview向下滑动时,隐藏顶部布局 2.listview向上滑动到最上面,显示顶部布局 3.顶部布局的隐藏和显示有过渡效果 4.第一次加载listview时,顶部不要隐藏 布局: 注 ...

  10. ROC曲线绘制

    ROC 曲线绘制 个人的浅显理解:1.ROC曲线必须是针对连续值输入的,通过选定不同的阈值而得到光滑而且连续的ROC曲线,故通常应用于Saliency算法评价中,因为可以选定0~255中任意的值进行阈 ...