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 ...
随机推荐
- 利用Azure Functions和k8s构建Serverless计算平台
题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...
- gdb基本命令总结
本文介绍使用gdb调试程序的常用命令. 主要内容: [简介] [举例] [其他] [简介] ============= GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 ...
- Jenkins项目构建运行
[准备环境] 继Jenkins环境搭建完成后,进行插件的管理 [思路] 项目顺序是,开发提交代码到代码仓库,测试通过Jenkins拉下开发的代码打包部署: 1.开发提交代码 2.Jenkins自动从代 ...
- TLS1.2协议设计原理
目录 前言 为什么需要TLS协议 发展历史 协议设计目标 记录协议 握手步骤 握手协议 Hello Request Client Hello Server Hello Certificate Serv ...
- WeChair项目Beta冲刺(6/10)
团队项目进行情况 1.昨日进展 Beta冲刺第六天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码预约 ...
- matplotlib 强化学习
matplotlib 强化学习 import matplotlib.pyplot as plt ..., 每一个原型对象都有一个constructor属性,指向函数对象. eg: Person函数: P ...
- Spring Boot入门系列(十六)使用pagehelper实现分页功能
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- Tensorflow与Keras自适应使用显存
Tensorflow支持基于cuda内核与cudnn的GPU加速,Keras出现较晚,为Tensorflow的高层框架,由于Keras使用的方便性与很好的延展性,之后更是作为Tensorflow的官方 ...