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 文艺平衡树的更多相关文章

  1. bzoj3223Tyvj 1729 文艺平衡树 splay

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

  2. [BZOJ3223]Tyvj 1729 文艺平衡树

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

  3. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

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

  4. BZOJ 3223: Tyvj 1729 文艺平衡树

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

  5. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

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

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

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

  7. 3223: Tyvj 1729 文艺平衡树

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

  8. [补档][Tvyj 1729]文艺平衡树

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

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

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

随机推荐

  1. django 网站域名解析 IP绑定 新建站 新域名

    备案成功后,我们要用域名来访问服务器,这个不仅要修改nginx的配置文件,还要设置域名的解析,下面是我的一个调试经验过程:直接上图了. 1.问题查找

  2. 图解leetcode5-10 | 和233酱一起刷leetcode系列(2)

    本周我们继续来看5道磨人的小妖精,图解leetcode6-10- 多说一句,leetcode10 杀死了233酱不少脑细胞... 另: 沉迷算法,无法自拔.快来加入我们吧! 别忘了233酱的一条龙服务 ...

  3. JUnit单元测试%MODULE_WORKING_DIR%' does not exist

    解决办法: idea > Run -> Edit Configurations>JUnit(或者application,根据自己报错的类型选择)>单独设置:选中有单元测试的类 ...

  4. MapReduce 论文阅读笔记

    Abstract MapReduce : programming model 编程模型 an associated implementation for processing and generati ...

  5. 关于JavaScript函数

    object.defineProperty()函数 再学习这个函数之前,我们先创建一个object对象 var person = {} person.name = "junlebao&quo ...

  6. MongoDB入门三

    MongoDB字段问题  增删查改操作 删除一列操作db.RiderReaTimePositon.update({},{$unset:{'CreateTime':''}},false,true)db. ...

  7. MongoDB快速入门教程 (4.2)

    4.2.Mongoose实现增删查改 中文文档地址: https://cn.mongoosedoc.top/docs/guide.html 4.2.1.Mongoose是什么? Mongoose是Mo ...

  8. dart快速入门教程 (7.1)

    7.面向对象 dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,所有的类都是Object的子类,换句话说就是万物皆对象 7.1.类与对象 void main() { // 注意:ne ...

  9. DOM-BOM-EVENT(3)

    3.Node常用属性 childNodes 获取所有子节点 <div id="wrap"> <div>1111</div> <div> ...

  10. 想做时间管理大师?你可以试试Mybatis Plus代码生成器

    1. 前言 对于写Crud的老司机来说时间非常宝贵,一些样板代码写不但费时费力,而且枯燥无味.经常有小伙伴问我,胖哥你怎么天天那么有时间去搞新东西,透露一下秘诀呗. 好吧,今天就把Mybatis-pl ...