题目链接

splay:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+,inf=0x3f3f3f3f;
int ch[N][],val[N],siz[N],rev[N],tot,n,m,a[N],rt;
int newnode(int x) {int u=++tot; val[u]=x,siz[u]=,ch[u][]=ch[u][]=rev[u]=; return u;}
void pu(int u) {siz[u]=siz[ch[u][]]+siz[ch[u][]]+;}
void pd(int u) {if(rev[u])rev[u]=,swap(ch[u][],ch[u][]),rev[ch[u][]]^=,rev[ch[u][]]^=;}
void rot(int& u,int f) {
int v=ch[u][f];
ch[u][f]=ch[v][f^],ch[v][f^]=u;
pu(u),pu(v),u=v;
}
void splay(int& u,int k) {
pd(u);
if(siz[ch[u][]]+!=k) {
int f=k>siz[ch[u][]]+;
if(f)k-=siz[ch[u][]]+;
int& v=ch[u][f];
pd(v);
if(siz[ch[v][]]+!=k) {
int ff=k>siz[ch[v][]]+;
if(ff)k-=siz[ch[v][]]+;
splay(ch[v][ff],k),f==ff?rot(u,f):rot(v,ff);
}
rot(u,f);
}
}
void sp(int& u,int k,int& v) {splay(u,k),v=ch[u][],ch[u][]=,pu(u);}
void mg(int& u,int v) {splay(u,siz[u]),ch[u][]=v,pu(u);}
void rv(int& u,int l,int r) {
int lv,rv;
sp(u,r,rv),sp(u,l-,lv);
rev[lv]^=;
mg(u,lv),mg(u,rv);
}
#define mid ((l+r)>>1)
void build(int& u,int l=,int r=n) {
if(l>r) {u=; return;}
u=newnode(a[mid]);
build(ch[u][],l,mid-),build(ch[u][],mid+,r),pu(u);
}
int f;
void dfs(int u) {
if(!u)return;
pd(u);
dfs(ch[u][]);
if(val[u]!=) {
f?f=:printf(" ");
printf("%d",val[u]);
}
dfs(ch[u][]);
}
int main() {
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i)a[i]=i;
a[]=,build(rt);
while(m--) {
int l,r;
scanf("%d%d",&l,&r);
rv(rt,l+,r+);
}
f=,dfs(rt);
return ;
}

无旋treap(FHQ-treap):

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+,inf=0x3f3f3f3f;
int ch[N][],val[N],siz[N],rd[N],rev[N],tot,n,m,a[N],rt;
#define l(u) ch[u][0]
#define r(u) ch[u][1]
int newnode(int x) {int u=++tot; val[u]=x,siz[u]=,rd[u]=rand(),l(u)=r(u)=rev[u]=; return u;}
void flip(int u) {rev[u]^=,swap(l(u),r(u));}
void pu(int u) {siz[u]=siz[l(u)]+siz[r(u)]+;}
void pd(int u) {if(rev[u])rev[u]=,flip(l(u)),flip(r(u));}
void sp(int& u,int k,int& v) {
if(!u) {v=; return;}
pd(u);
if(k>=siz[l(u)]+)sp(r(u),k-(siz[l(u)]+),v),pu(u);
else v=u,u=l(u),sp(u,k,l(v)),pu(v);
}
void mg(int& u,int v) {
if(!u||!v) {u=u|v; return;}
if(rd[u]>rd[v])pd(u),mg(r(u),v);
else pd(v),mg(u,l(v)),l(v)=u,u=v;
pu(u);
}
void rv(int& u,int l,int r) {
int lv,rv;
sp(u,r,rv),sp(u,l-,lv);
flip(lv);
mg(u,lv),mg(u,rv);
}
int f;
void dfs(int u) {
if(!u)return;
pd(u);
dfs(l(u));
if(val[u]!=) {
f?f=:printf(" ");
printf("%d",val[u]);
}
dfs(r(u));
}
int main() {
srand(time());
scanf("%d%d",&n,&m);
rt=newnode();
for(int i=; i<=n; ++i)mg(rt,newnode(i));
while(m--) {
int l,r;
scanf("%d%d",&l,&r);
rv(rt,l+,r+);
}
f=,dfs(rt);
return ;
}

BZOJ - 3223 Tyvj 1729 文艺平衡树 (splay/无旋treap)的更多相关文章

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

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

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

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

  3. BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

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

  4. bzoj 3223/tyvj 1729 文艺平衡树 splay tree

    原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...

  5. BZOJ 3223 Tyvj 1729 文艺平衡树 | Splay 维护序列关系

    题解: 每次reverse(l,r) 把l-1转到根,r+1变成他的右儿子,给r+1的左儿子打个标记就是一次反转操作了 每次find和dfs输出的时候下放标记,把左儿子和右儿子换一下 记得建树的时候建 ...

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

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

  7. [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...

  8. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)

    题面: [模板]文艺平衡树(Splay) 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> ...

  9. [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转

    题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...

随机推荐

  1. CSS元素隐藏的11种方法

    { display: none; /* 不占据空间,无法点击 */ } { visibility: hidden; /* 占据空间,无法点击 */ } { position: absolute; cl ...

  2. input实现文件上传

    input实现文件上传 input + ajax 实现文件上传,包括文件大小及类型的判断 一.html <input type="file" id="file&qu ...

  3. tinyxml解析xml

    基于tinyxml做的简单的xml解析. 1.创建xml bool CreateXmlFile(string& szFileName) {//创建xml文件,szFilePath为文件保存的路 ...

  4. 原生javascript-日期年,月,日联动选择

    在线例子:http://lgy.1zwq.com/dateSwitch/ 月份的判定,由于涉及到过多了判定条件,如果用if else会大大降低性能,建议用switch 语法 getDays:funct ...

  5. jq中的$.post中方法

    jQuery.post( url, [data], [callback], [type] ) : 使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...

  6. confluence 部署与配置

    什么是confluence 部署步骤 安装 下载目标平台目标版本安装包.windows为例 若第一次默认安装 一直下一步. 若再次安装 下载并将mysql 连接控件放到 /xxx/xxx/conflu ...

  7. fegin--调用超时设置

    Feign请求超时问题 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码.而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间 ...

  8. PHP获取日期对应星期、一周日期、星期开始与结束日期的方法

    本文实例讲述了PHP获取日期对应星期.一周日期.星期开始与结束日期的方法.分享给大家供大家参考,具体如下: /* * 获取日期对应的星期 * 参数$date为输入的日期数据,格式如:2018-6-22 ...

  9. 【这些年】Linux C/C++软件开发用过的工具

          这些年一直从事Linux下C/C++软件开发,学习工作中用到了不少开发工具,一直想做个总结,却总是因为这个原因那个原因,未能动笔.趁今天天气凉爽,空气清新,花点儿功夫,做一个小结啦,防止以 ...

  10. Java Ioc详解和实现

    作者:竹竿 这章我们讲Java Spring的Ioc控制反转, DI依赖注入. 阅读此文之前,必须深入理解Java反射原理. 1. Ioc控制反转 原来类对象实例的创建都是有程序员自己通过new进行的 ...