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 ...
随机推荐
- 批量修改Linux系统密码
截取主机IP地址最后一位数.匹配一组定义好的自定义密码.使用chpasswd修改主机账户密码 截图主机IP [root@web01 ~]# ip addr 1: lo: <LOOPBACK,UP ...
- Django模型Model的定义
概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...
- web前端对文件的引用规则
web前端一般常用文件 .html .css .js.但是当用css文件和html引入资源(比如图片)时,路径可能不相同.下面总结了几条. 使用相对路径引入规则: html或者js引入图片,按照htm ...
- centos安装wget 及配置
yum -y install wget #yum -y install setup 本文 #yum install perl Searching for GCC... The path "& ...
- spring mvc流程理解
1.controller处理的终究就是一个结果,默认是modelandview对象,controller里自己随便调用service或者dao,终究都还是在controller里有返回值. 2. 在 ...
- [SharePoint][SharePoint2013循序渐进]SPS2013简介
本章概要: 1.啥是SPS2013 2.SharePoint如何作用于团队协作和信息共享 3.SP2013有哪些用户权限 4.什么是SharePoint2013 online 5.SP在内部署和在线订 ...
- hrift does not support polymorphic data types
hrift does not support polymorphic data types Exception in thread "main" com.facebook.swif ...
- [HTML5] Handle Offscreen Accessibility
Sometime when some component is offscreen, but still get focus when we tab though the page. This can ...
- iframe显示滚动栏
子页面通过iframe载入.出现了竖向滚动栏 最后查出原因:文档申明 iframe有滚动栏的页面的文档申明 <!DOCTYPE html> 改成例如以下即可了 <!DOCTYPE H ...
- (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...