bzoj3223Tyvj 1729 文艺平衡树
题意:
一个数列,支持区间翻转操作。
题解:
splay裸题。注意涉及到区间操作的一般用splay不用treap。
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define fa(x) nds[x].fa
#define ch(x,y) nds[x].ch[y]
#define tg(x) nds[x].tg
#define v(x) nds[x].v
#define sz(x) nds[x].sz
using namespace std; struct nd{int fa,ch[],v,sz,tg;};
nd nds[]; int size,root,n,m; bool first;
void pushdown(int x){
if(! x)return; if(tg(x)){
if(ch(x,)&&ch(x,))swap(ch(x,),ch(x,)),tg(ch(x,))^=,tg(ch(x,))^=;else
if(ch(x,))ch(x,)=ch(x,),ch(x,)=,tg(ch(x,))^=;else ch(x,)=ch(x,),ch(x,)=,tg(ch(x,))^=;
tg(x)^=;
}
}
void update(int x){if(! x)return; sz(x)=sz(ch(x,))+sz(ch(x,))+;}
void rotate(int x){
if(x==||fa(x)==)return;
int a1=fa(x),a2=fa(a1); bool a3=(x==ch(a1,)),a4=(a1==ch(a2,));
if(a2)ch(a2,a4)=x; if(ch(x,!a3))fa(ch(x,!a3))=a1; ch(a1,a3)=ch(x,!a3); ch(x,!a3)=a1;
fa(x)=a2; fa(a1)=x; update(a1); update(x); if(a2)update(a2);
}
void splay(int x,int y){
if(x==||y==)return; int z=fa(y); if(y==root)root=x;
while(fa(x)!=z){
if(fa(fa(x))!=z){
if((x==ch(fa(x),))^(fa(x)==ch(fa(fa(x)),)))rotate(x);else rotate(fa(x));
}
rotate(x);
}
}
int build(int l,int r){
if(l>r)return ;
++size; int ff=size; int m=(l+r)>>; ch(ff,)=build(l,m-); ch(ff,)=build(m+,r);
if(ch(ff,))fa(ch(ff,))=ff; if(ch(ff,))fa(ch(ff,))=ff;
v(ff)=m; tg(ff)=; update(ff); return ff;
}
int find(int p){
int x=root; while(){
if(x==)return ; pushdown(x);
int a1=sz(ch(x,)); if(a1+==p)return x;
if(a1+<p)p-=(a1+),x=ch(x,);else x=ch(x,);
}
}
void rever(int l,int r){
int a1=find(l-),a2=find(r+); splay(a2,root);
if(l>)splay(a1,ch(a2,)),tg(ch(a1,))^=;else tg(ch(a2,))=;
}
void print(int x){
if(x==)return; pushdown(x);
print(ch(x,));
if(v(x)!=n+)
if(!first)printf("%d",v(x)),first=;else printf(" %d",v(x));
print(ch(x,));
}
int main(){
//freopen("test.txt","r",stdin);
scanf("%d%d",&n,&m); size=; root=build(,n+);
inc(i,,m){
int a,b; scanf("%d%d",&a,&b); rever(a,b);
}
first=; print(root);
return ;
}
20160418
bzoj3223Tyvj 1729 文艺平衡树的更多相关文章
- bzoj3223Tyvj 1729 文艺平衡树 splay
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5644 Solved: 3362[Submit][Sta ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树(splay)
速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...
- 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1347 Solved: 724[Submit][Stat ...
- [补档][Tvyj 1729]文艺平衡树
[Tvyj 1729]文艺平衡树 题目 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结 ...
- bzoj 3223: Tyvj 1729 文艺平衡树 (splay)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...
随机推荐
- C#数据结构与算法系列(四):链表——单链表(Single-LinkedList)
1.介绍: 链表是有序的列表,但是它在内存的存储如下: 链表是以节点的方式来存储,链式存储 每一个节点包含data域,next域:指向下一个节点 链表的各个节点不一定是连续存储 链表分带头节点的链表 ...
- HBase中加盐(Salting)之后的表如何读取:协处理器文章
我们介绍了避免数据斑点的三种比较常见方法: 加盐-盐腌 哈希-散列 反转-反转 其中在加盐(Salting)的方法里面是这么描述的:给Rowkey分配一个随机指针以使其和之前排序不同.但是在Rowke ...
- docker 容器命令
语法docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/ST ...
- cookie的介绍和使用
一.什么是cookie 是由服务器端生成,发送给客户端(一般指浏览器),浏览器将cookie以键值对的形式保存到某个目录下的文本文件内.下次请求该网站时就把cookie发送回服务器.(cookie就是 ...
- matplotlib 强化学习
matplotlib 强化学习 import matplotlib.pyplot as plt ...![](https://img2020.cnblogs.com/blog/1642028/2020 ...
- 终于搞明白Unicode,ASCII,UTF8,UCS2编码是啥了
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 前言 本文起因于 ...
- 详述@Responsebody和HTTP异步请求的关系
Map.ModelAndView.User.List等对象都可以作为返回值.上述这两种对象都可以使用此注解.使用此注解即表示是在同一次请求的响应体里返回.浏览器以异步http的方式来接收.比如后端的M ...
- 【原创】Linux中断子系统(四)-Workqueue
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- SpringMVC和Spring
SpringMVC和Spring汇总 转载:https://www.cnblogs.com/doudouxiaoye/p/5693399.html 1. 为什么使用Spring ? 1). 方便解耦, ...
- 用JS实现改变文本框的只读属性
<input id="aaa" readonly><input id="bbb" readonly> <script>doc ...