题目背景
这是一道经典的Splay模板题——文艺平衡树。

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

输入格式
第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2, \cdots n-1,n)(1,2,⋯n−1,n) m表示翻转操作次数

接下来m行每行两个数 [l,r][l,r] 数据保证 1 \leq l \leq r \leq n1≤l≤r≤n

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

输入输出样例
输入 #1复制

5 3
1 3
1 3
1 4
输出 #1复制
4 3 2 1 5
说明/提示
n, m \leq 100000n,m≤100000


题目大意:就是给你一个区间,m次操作,每次反转一个区间,求最后区间的状态。


这道题虽然是splay的模板题,但是我们并不想用splay做(因为不会),于是我们可以考虑用无旋treap来做区间操作。


我们对无旋treap打上懒标记,每次记录一下即可。要注意每次split子树时,先传递懒标记,防止树被分裂之后,懒标记无法正确向下传递。

最后输出答案,一次dfs即可。


AC代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
int n,m;
int ch[N][2],sz[N],val[N],pri[N],lazy[N],num,root,x,y,z;
inline void push_up(int p){sz[p]=sz[ch[p][0]]+sz[ch[p][1]]+1;
}
inline void push_down(int p){if(!lazy[p])   return ;    swap(ch[p][0],ch[p][1]);lazy[ch[p][0]]^=1; lazy[ch[p][1]]^=1; lazy[p]=0;
}
inline int new_node(int v){sz[++num]=1; val[num]=v; pri[num]=rand(); return num;
}
void split(int now,int k,int &x,int &y){if(!now)    return (void)(x=y=0);push_down(now);if(k<=sz[ch[now][0]]) y=now,split(ch[now][0],k,x,ch[now][0]);else    x=now,split(ch[now][1],k-sz[ch[now][0]]-1,ch[now][1],y);push_up(now);
}
int merge(int x,int y){if(!x||!y)   return x+y;push_down(x);   push_down(y);if(pri[x]<pri[y]){ch[x][1]=merge(ch[x][1],y);  push_up(x); return x;}else{ch[y][0]=merge(x,ch[y][0]); push_up(y); return y;}
}
inline void reverse(int l,int r){split(root,l-1,x,y);   split(y,r-l+1,y,z);lazy[y]^=1;    root=merge(merge(x,y),z);
}
void dfs(int x){if(!x)  return ;push_down(x);dfs(ch[x][0]);printf("%d ",val[x]);dfs(ch[x][1]);
}
signed main(){srand((unsigned)time(NULL));scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)   root=merge(root,new_node(i));  while(m--){int l,r; scanf("%d %d",&l,&r); reverse(l,r);}dfs(root);puts("");return 0;
}

文艺平衡树(Splay)相关推荐

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

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

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

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

  3. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  4. 文艺平衡树 Splay 学习笔记(1)

    (这里是Splay基础操作,reserve什么的会在下一篇里面讲) 好久之前就说要学Splay了,结果苟到现在才学习. 可能是最近良心发现自己实在太弱了,听数学又听不懂只好多学点不要脑子的数据结构. ...

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

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

  6. 【Splay】文艺平衡树(金牌导航 Splay-2)

    #文艺平衡树 金牌导航 Splay-2 题目大意 给你一个1~n的序列,然后对序列的区间做若干次翻转,问你最后的序列 输入样例 5 3 1 3 1 3 1 4 输出样例 4 3 2 1 5 数据范围 ...

  7. splay区间翻转(bzoj 3223: Tyvj 1729 文艺平衡树)

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

  8. [Tyvj 1729] 文艺平衡树

    题面如下: Tyvj 1729 文艺平衡树 Time Limit: 1 Sec  Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个有 ...

  9. 洛谷 P3391 【模板】文艺平衡树

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

最新文章

  1. 在CentOS 6.8 x86_64上安装ATS 6.2.1实录
  2. 面试造飞机这么能耐,对着调优实战更不能怂啊!
  3. 如何在Python中反转列表?
  4. react router 路由守卫_react实现hash路由
  5. 中国无烟煤市场需求规模与未来发展形势分析报告2022版
  6. SpringSecurity 权限控制准备之IOC容器结构说明
  7. 学习nginx接口调用之摘录
  8. JS原型链中的属性问题
  9. Dubbo 高危漏洞!原来都是反序列化惹得祸
  10. MFC基于多文档框架(对话框内嵌office控件(word文档))
  11. python读取不到文件怎么办_Python从子目录中找不到的目录文件读取文件(在那里)...
  12. 关于计算机的知识古人,世界仅是一串二进制编码?我们是虚拟的?古人早就给出了答案...
  13. 统计学基础知识梳理,看这一篇就够了
  14. seaweedfs java_seaweedfs-java-client
  15. 我的k8s随笔:Kubernetes 1.17.0 部署讲解
  16. EXCEL表格将两列数据进行排列组合
  17. [转]C#中的global关键字(global::)
  18. C++ 游戏服务器开发有什么推荐的学习资料或者书籍?
  19. 政策解读│软件产业企业所得税优惠政策介绍(2022年版)
  20. 记一次 k8s 集群单点故障引发的血案

热门文章

  1. 【网络】拔掉网线后,TCP连接还存在吗?
  2. Capsule Networks胶囊网络(一)
  3. oracle数据类型对应java类型
  4. 2021苹果春季发表会懒人包:AirTags、iMac、iPad Pro、Apple TV 4K
  5. spring zipkin mysql_spring cloud zipkin2 + mysql
  6. 计算器Java代码实现(进行按钮事件处理和键盘事件处理)
  7. 绿叶与克利夫兰医学中心联合在沪打造未来医院
  8. 感谢商家,这样寄行李省了100多
  9. 等价类划分法的步骤和示例
  10. 回忆PHTOTSHOP技巧-路径技巧篇