您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是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

没什么可以说的,蓝桥杯求稳,多写点。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int N;
void swap(int &x,int &y){
int tmp=x; x=y;y=tmp;
}
struct Splay
{
int ch[maxn][],fa[maxn],key[maxn],sz[maxn],lazy[maxn],rt,cnt;
Splay(){
rt=cnt=;
}
int get(int x) { return ch[fa[x]][]==x; }
void pushdown(int Now){
if(lazy[Now]){
swap(ch[Now][],ch[Now][]);
if(ch[Now][]) lazy[ch[Now][]]^=;
if(ch[Now][]) lazy[ch[Now][]]^=;
lazy[Now]=;
}
}
void pushup(int Now){
sz[Now]=+sz[ch[Now][]]+sz[ch[Now][]];
}
int build(int L,int R,int f)
{
if(L>R) return ;
int Mid=(L+R)>>;
if(!rt) rt=Mid;
key[Mid]=Mid; fa[Mid]=f; lazy[Mid]=;
ch[Mid][]=build(L,Mid-,Mid);
ch[Mid][]=build(Mid+,R,Mid);
pushup(Mid);
return Mid;
}
int find(int x)
{
int Now=rt;
while(true){
pushdown(Now);
if(sz[ch[Now][]]>=x) Now=ch[Now][];
else {
x=x-sz[ch[Now][]]-;
if(x==) return Now;
Now=ch[Now][];
}
}
}
void rotate(int x)
{
int old=fa[x],fold=fa[old],opt=get(x);
pushdown(old); pushdown(x);
ch[old][opt]=ch[x][opt^]; fa[ch[x][opt^]]=old;
ch[x][opt^]=old; fa[old]=x; fa[x]=fold;
pushup(old); pushup(x);
if(fold) ch[fold][ch[fold][]==old]=x;
}
void splay(int x,int y)
{
for(int f;(f=fa[x])!=y;rotate(x))
if(fa[f]!=y)
rotate(get(f)==get(x)?f:x);
if(!y) rt=x;
}
void revers(int x,int y)
{
x=find(x); splay(x,);
y=find(y); splay(y,x);
lazy[ch[ch[rt][]][]]^=;
}
void print(int Now)
{
pushdown(Now);
if(ch[Now][]) print(ch[Now][]);
if(key[Now]>&&key[Now]<N+) printf("%d ",key[Now]-);
if(ch[Now][]) print(ch[Now][]);
}
}S;
int main()
{
int T,a,b;
scanf("%d%d",&N,&T);
S.build(,N+,);
while(T--){
scanf("%d%d",&a,&b);
S.revers(a,b+);
}
S.print(S.rt);
return ;
}

N,M<=100000

Tyvj:1729 文艺平衡树(saply练习)的更多相关文章

  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. BZOJ 3223: Tyvj 1729 文艺平衡树

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

  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. 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1347  Solved: 724[Submit][Stat ...

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

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

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

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

  9. tyvj 1729 文艺平衡树

    文艺平衡树 From admin 背景 Background 此为平衡树系列第二道:文艺平衡树 描述 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以 ...

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

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

随机推荐

  1. HDU 3973 线段树+字符串hash

    题目大意: 不断修改字符串中的字母,然后询问区间字符串是否处于已给定的字符串集合中 这里将原来的字符串集合保存到hash表中,当然用map,set都没有问题 修改查询都用线段树实现,自己的query函 ...

  2. 洛谷P1021 邮票面值设计

    题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...

  3. html5的新通讯技术socket.io,实现一个聊天室

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [转]GitHub 优秀的 Android 开源项目

    GitHub 优秀的 Android 开源项目 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageV ...

  5. LightOJ1094 - Farthest Nodes in a Tree(树的直径)

    http://lightoj.com/volume_showproblem.php?problem=1094 Given a tree (a connected graph with no cycle ...

  6. P3366 最小生成树【模板】 洛谷

    https://www.luogu.org/problem/show?pid=3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包 ...

  7. 学习日常笔记<day13>jsp加强

    1.jsp的内置对象(重点) 1.1什么是内置对象? 在jsp开发中,会频繁使用到一些现象 例如HttpSession,ServletContext,ServletContext,HttpServle ...

  8. [转] Scalers:刻意练习的本质就是持续行动+刻意学习

    原文: http://www.scalerstalk.com/1264-peak-conscious ------------------------------------------------- ...

  9. [转]Wireshark抓包工具--TCP数据包seq ack等解读

    原文: http://blog.csdn.net/wang7dao/article/details/16805337/ ---------------------------------------- ...

  10. Linux中查看文件或者文件夹大小

    df -l 查看磁盘空间大小命令 df -hl  查看磁盘剩余空间 df -h  查看每个根路径的分区大小 du -sh  当前文件夹下所有文件大小(包括子文件大小 du -sm  [文件夹] 返回该 ...