3223. 文艺平衡树【平衡树-splay】
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
1 3
1 3
1 4
Sample Output
HINT
N,M<=100000
板子啊,常规操作
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #define MAXN (100000+10)
- using namespace std;
- int Father[MAXN];
- int Son[MAXN][];
- int Size[MAXN];
- int Smark[MAXN];
- int a[MAXN];
- int Key[MAXN];
- int Root;
- int n,m,l,r;
- int Get(int x)
- {
- return Son[Father[x]][]==x;
- }
- void Update(int x)
- {
- Size[x]=Size[Son[x][]]+Size[Son[x][]]+;
- }
- void Pushdown(int x)
- {
- if (x && Smark[x])
- {
- Smark[Son[x][]]^=;
- Smark[Son[x][]]^=;
- swap(Son[x][],Son[x][]);
- Smark[x]=;
- }
- }
- void Rotate(int x)
- {
- Pushdown(Father[x]);
- Pushdown(x);
- int fa=Father[x];
- int fafa=Father[fa];
- int wh=Get(x);
- Son[fa][wh]=Son[x][wh^];
- Father[fa]=x;
- if (Son[fa][wh]) Father[Son[fa][wh]]=fa;
- Father[x]=fafa;
- Son[x][wh^]=fa;
- if (fafa) Son[fafa][Son[fafa][]==fa]=x;
- Update(fa);
- Update(x);
- }
- void Splay(int x,int tar)
- {
- for (int fa;(fa=Father[x])!=tar;Rotate(x))
- if (Father[fa]!=tar)
- Rotate(Get(fa)==Get(x)?fa:x);
- if (!tar) Root=x;
- }
- void Build (int l,int r,int fa)
- {
- if (l>r) return;
- int mid=(l+r)/;
- if (mid<fa) Son[fa][]=mid;
- if (mid>fa) Son[fa][]=mid;
- Father[mid]=fa;
- Size[mid]=;
- Key[mid]=a[mid];
- if (l==r) return;
- Build(l,mid-,mid);
- Build(mid+,r,mid);
- Update(mid);
- }
- int Findx(int x)
- {
- int now=Root;
- while ()
- {
- Pushdown(now);
- if (x<=Size[Son[now][]])
- now=Son[now][];
- else
- {
- x-=Size[Son[now][]];
- if (x==) return now;
- x-=;
- now=Son[now][];
- }
- }
- }
- void Rever(int l,int r)
- {
- int f1=Findx(l);
- int f2=Findx(r+);
- Splay(f1,);
- Splay(f2,f1);
- Smark[Son[Son[Root][]][]]^=;
- }
- void Write(int x)
- {
- Pushdown(x);
- if (Son[x][]) Write(Son[x][]);
- if (x>= && x<=n+) printf("%d ",Key[x]);
- if (Son[x][]) Write(Son[x][]);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for (int i=;i<=n+;++i)
- a[i]=i-;
- Build(,n+,);Root=(n+)/;
- for (int i=;i<=m;++i)
- {
- scanf("%d%d",&l,&r);
- if (l>=r) continue;
- Rever(l,r);
- }
- Write(Root);
- }
3223. 文艺平衡树【平衡树-splay】的更多相关文章
- fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)
题面: [模板]文艺平衡树(Splay) 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> ...
- P3391 【模板】文艺平衡树(Splay)新板子
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- 洛谷——P3369 【模板】普通平衡树(splay)(基础splay,维护一些神奇的东东)
P3369 [模板]普通平衡树 平衡树大法好,蒟蒻(博主)最近正在收集高级数据结构的碎片,企图合成数据结构的元素之力来使自己的RP++... 您需要写一种数据结构(可参考题目标题),来维护一些数,其中 ...
- bzoj 3223 文艺平衡树 - Splay
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3884 Solved: 2235[Submit][Sta ...
- 【BZOJ】3223: Tyvj 1729 文艺平衡树(splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=3223 默默的.. #include <cstdio> #include <cstr ...
- bzoj 3223 文艺平衡树 splay 区间翻转
Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 17715 Solved: 7769[Submit][Status][ ...
- BZOJ 3223 Tyvj 1729 文艺平衡树(Splay)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3223 [题目大意] 给出一数列,问m次区间翻转后的结果. [题解] Splay 区间翻 ...
- bzoj 3223 文艺平衡树 Splay 打标志
是NOI2003Editor的一个子任务 #include <cstdio> #include <vector> #define maxn 100010 using names ...
- 【模板】文艺平衡树(Splay) 区间翻转 BZOJ 3223
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 N,M<= ...
随机推荐
- [日常] Go语言圣经前言
https://books.studygolang.com/gopl-zh/ go语言圣经 1.Go语言有时候被描述为“C类似语言”,或者是“21世纪的C语言”. 2.Go语言中和并发编程相关的特性是 ...
- Linux下socket通信和多线程
服务端socket流程:socket() –> bind() –> listen() –> accept() –> 读取.发送信息(recv,send等) 客户端socket流 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------ 属性,类方法,静态方法
属性 属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理. 应用场景: 类中 要用名词时候可以用@property 比如,求面积,周长,平方,体脂 等运算时候 例如: bmi是名词,最 ...
- LINQ语法类似于SQL的语法
LINQ语法类似于SQL的语法如下, Models.BookStoreEntities 是从添加新建项中的数据--->ADO.NET实体数据模型--->从数据库生成--->使用5.0 ...
- html-使用表单标签实现注册页面
案例说明: - 使用表格实现页面效果 - 超链接不想要有效果,使用href="#" - 如果表格里面的单元格没有内容,使用空格作为占位符 - 使用图片标签提交表单 <in ...
- react组件直接在document上添加事件
demo:比如组件里有个div写的框框,点击document body的背景色变红,点击div写的框框没效果 componentDidMount(){ document.onclick = this. ...
- 网络I/O模型--01阻塞模式(普通)
很长一段时间内,大多数网络通信方式都是阻塞模式,即: · 客户端 向服务器端发出请求后,客户端会一直处于等待状态(不会再做其他事情),直到服务器端返回结果或者网络出现问题 . · 服务器端同样如此,当 ...
- Vue 框架-10-搭建脚手架 CLI
Vue 框架-10-搭建脚手架 CLI + 批处理快捷启动 脚手架是通过 webpack 搭建的开发环境 使用 ES6 语法 打包和压缩 JS 为一个文件 项目文件在环境中,而不是浏览器 实现页面自动 ...
- 【个人经历】记自己的第一次GitHub开源代码共享经历
题记: 自己做程序员快三年有余了,感觉自己和刚入职相比确实有了不少进步,当然三年要是不进步那不就傻了吗,有时候我也在想,我在这三年里留下了什么,当然也不是说有多么高尚的想法,就是以后对别人介绍自己的时 ...
- Oracle获取session的trace
1. 使用参数SQL_TRACE 下面是官网对此参数的说明 SQL_TRACE Property Description Parameter type Boolean Default value fa ...