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. 解决adb检测不到夜神模拟器

    1.安装夜神模拟器 2.安装adb(安装教程——我的网盘(无邪appium环境安装.word)) 3.在D:\android-sdk_r24.4.1-windows\android-sdk-windo ...

  2. 0.0---selenium+java自动化基础01---元素定位和操作

    一.定位方法 1.通过ID定位元素:driver. findElement(By.id(value)); 2.通过元素的名称定位元素: driver. findElement(By.name( val ...

  3. RFID-RC522 模块的读写操作【Arduino】

    接线 Arduino Uno <-> RFID-RC52210 <-> SDA13 <-> SCK11 <-> MOSI12 <-> MIS ...

  4. Spring Cloud 系列之 Alibaba Nacos 配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  5. Latex 安装 教程

    需要安装texlive和编辑器texstudio. 安装教程如https://www.cnblogs.com/dingruihfut/p/9690073.html

  6. 关于自动寻路(Navigation)的初级总结

    1.使用Nav Mesh Link组件 该组件会实现寻路者从Start跳向end点 注意Player会优先选择最佳路线,且Start,End两个物体都应该在Walkable的区域上 2.使用Nav M ...

  7. HTTP协议简要

    HTTP协议简要 HTTP协议是指超文本传输协议,简单来说就是一种规则,允许将HTML文档从Web服务器传送到Web浏览器. HTTP请求 HTTP请求包括三部分:请求行(请求方法),请求头(消息报头 ...

  8. TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  9. Java并发编程-深入探讨synchronized实现原理

    synchronized这个关键字对应Java程序猿来说是非常的熟悉,只要遇到要解决线程安全问题的地方都会使用这个关键字.接下来一起来探讨一下synchronized到底时怎么实现线程同步,使用syn ...

  10. 在运行时生成C# .NET类

    ​本文译自​:​Generating C# .NET Classes at Runtime 作者:WedPort 在我的C#职业生涯中,有几次我不得不在运行时生成新的类型.希望把它写下来能帮助有相同应 ...