splay 文艺平衡树 (数据结构)
题目大意:略
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 文艺平衡树 (数据结构)的更多相关文章
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- 【Splay】bzoj3223-Tyvj1729文艺平衡树
一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...
- bzoj3223 文艺平衡树 (treap or splay分裂+合并)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
- Tyvj P1729 文艺平衡树 Splay
题目: http://tyvj.cn/p/1729 P1729 文艺平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第二道:文艺平衡树 ...
- 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标记表示是否翻转 ------------------------------------------------- ...
- bzoj3223Tyvj 1729 文艺平衡树 splay
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5644 Solved: 3362[Submit][Sta ...
- bzoj 3223: Tyvj 1729 文艺平衡树 (splay)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...
- bzoj 3223 文艺平衡树 - Splay
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3884 Solved: 2235[Submit][Sta ...
随机推荐
- Flask-SQLAlchemy中解决数据库连接1366报错
报错信息:Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'V ...
- Zend 官方框架增加 Swoole 协程支持 !
前言 Zend Framework 是 PHP 的官方框架,随着 Zend-Expressive-Swoole 0.2.2 的发布,率先支持了 Swoole 4 的协程功能,现在可以仅通过一个配置即可 ...
- Linux设备驱动--块设备(一)之概念和框架(转)
基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性 ...
- 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
又是爆炸的一场 心态有点小崩.但问题不大.. 看A题,一直担心有多个正方形..小心翼翼地看完之后,毅然地交上去了. [00:08] A[Accpted] 然后开始看B题. 觉得和之前做的某题很像,但翻 ...
- PHP学习总结(10)——PHP入门篇之自定义网站根目录
- easyui获取当前点击对象tabs的title和Index
观察上面打开的tabs选项卡,肯定会有一个目前是被选中状态,而这个状态的class属性也肯定是和其他tabs不一样的,有个class等于tabs-selected的 var title = $('.t ...
- C#中的IEnumerable<T>知识点
1.扩展IEnumerable<T>的方法 使继承了IEnumeralbe<T>的接口有了MyS方法 static class MySum { ...
- CF43A Football
CF43A Football 题意翻译 题目大意 两只足球队比赛,现给你进球情况,问哪支队伍赢了. 第一行一个整数nn (1\leq n\leq 1001≤n≤100 ),表示有nn 次进球,接下来n ...
- thrift 版本不一致导致 @Override 报错
thrift 版本不一致导致 @Override 报错 学习了:http://blog.csdn.net/antony1776/article/details/78920888 版本不一致导致的: 在 ...
- 6.设置ListView的Item的高度无效
问题: 设置ListView的Item的高度无效. 解决方式: 设置ListView的Item的minHeight属性.