题目大意:略

splay维护区间翻转裸题,为了减少不必要的麻烦,多插入两个点,分别是0和n+1

每次找区间的第K个值,就在splay上二分即可

顺便学了一下splay的完美建树,而且splay有一些小函数可以宏定义或者用inline,跑得飞快

最后跑一遍中序遍历即可

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100100
#define il inline
#define ll long long
#define root d[0].ch[1]
#define con(x,ff,p) d[x].fa=ff,d[ff].ch[p]=x
#define idf(x) d[d[x].fa].ch[0]==x?0:1
#define lb(x) (x&(-x))
using namespace std; int n,m,cnt;
struct SPLAY{
int fa,ch[],id,sum,mrk;
}d[N<<];
il void pushup(int x) {d[x].sum=d[d[x].ch[]].sum+d[d[x].ch[]].sum+;}
il void pushdown(int x)
{
if(!d[x].mrk) return;
swap(d[x].ch[],d[x].ch[]);
d[x].mrk=;
d[d[x].ch[]].mrk^=;
d[d[x].ch[]].mrk^=;
}
il void rot(int x)
{
int y=d[x].fa;int ff=d[y].fa;
int px=idf(x);int py=idf(y);
con(d[x].ch[px^],y,px);
con(y,x,px^);
con(x,ff,py);
pushup(y),pushup(x);
}
void splay(int x,int to)
{
to=d[to].fa;
int y,px,py;
while(d[x].fa!=to)
{
y=d[x].fa;
px=idf(y),py=idf(x);
if(d[y].fa==to) rot(x);
else if(py==px){
rot(y);
rot(x);
}else{
rot(x);
rot(x);
}
}
}
int Find(int w)
{
int x=root;
while(x)
{
pushdown(x);
if(d[d[x].ch[]].sum>=w)
{
x=d[x].ch[];
continue;
}
w-=d[d[x].ch[]].sum;
if(w==) return x;
w--,x=d[x].ch[];
}
return ;
}
int build(int ff,int l,int r)
{
if(l>r) return ;
int x=++cnt;
int mid=(l+r)>>;
d[x].id=mid-,d[x].fa=ff,d[x].sum=;
d[x].ch[]=build(x,l,mid-);
d[x].ch[]=build(x,mid+,r);
pushup(x);
return x;
}
void Print(int x)
{
pushdown(x);
if(d[x].ch[]) Print(d[x].ch[]);
if(d[x].id!=&&d[x].id!=n+) printf("%d ",d[x].id);
if(d[x].ch[]) Print(d[x].ch[]);
}
int main()
{
//freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
int x,y;
root=build(,,n+);
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
if(x==y) continue;
int xx=Find(x);
splay(xx,root);
int yy=Find(y+);
splay(yy,d[root].ch[]);
d[d[d[root].ch[]].ch[]].mrk^=;
}
Print(root);
return ;
}

splay 文艺平衡树 (数据结构)的更多相关文章

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

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

  2. 【Splay】bzoj3223-Tyvj1729文艺平衡树

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

  3. bzoj3223 文艺平衡树 (treap or splay分裂+合并)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3313  Solved: 1883 [Submit][S ...

  4. Tyvj P1729 文艺平衡树 Splay

    题目: http://tyvj.cn/p/1729 P1729 文艺平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第二道:文艺平衡树 ...

  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. bzoj3223Tyvj 1729 文艺平衡树 splay

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

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

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

  9. bzoj 3223 文艺平衡树 - Splay

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

随机推荐

  1. 使用canvas保存网页为pdf文件支持跨域

    前言 之前上一篇随笔说了Canvas截图网页为图片,下来个新需求,把网页截图后保存为PDF文件供用户下载. 前文 Canvas截图网页为图片:https://www.cnblogs.com/bubub ...

  2. Problem 13

    Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...

  3. ORM对象关系型映射的用法

    ORM对象关系型映射的用法 -- Django模型 1.什么是ORM关系型映射 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数 ...

  4. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第二篇【原理】

    http://blog.csdn.net/deadgrape/article/details/50574459 接着上一篇,我们开始聊聊APPIUM的框架和运行模式.废话不多说直接上图. 1.首先自动 ...

  5. SQL-Oracle-创建表空间,用户,授权

    --创建表空间 create tablespace imark datafile 'E:\oracle\product\10.2.0\oradata\orcl\imark.dbf' size 500M ...

  6. pthread_cond 唤醒特定线程的方法

  7. iOS开发一行代码系列:一行搞定输入框

    近期总结了下开发过程中经常使用的功能,发现有时候我在做反复性的劳动.于是决定把经常使用的功能抽出来,方便下次使用. 我的想法是:用最少的代码来解决这个问题.于是写了一些经常使用的工具类,名字就叫一行代 ...

  8. uiautomator中InteractionController学习笔记(8)

    4.1版本号 InteractionController将用户的键盘事件注入到android系统中,与系统进行交互(电视为什么不能设计成可组装,屏幕多大自己决定,想 多大就多大) click(int, ...

  9. [SCOI 2007] 排列

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1072 [算法] 状压DP [代码] #include<bits/stdc++. ...

  10. 4.QList

    #include "mainwindow.h" #include <QApplication> #include <QLabel> #include < ...