题目链接

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. share point CSOM 客户端模式 创建表 增删改查

    需要引用:Microsoft.SharePoint.Client ascx: <h4>CSOM所有表名</h4> <table> <tr> <td ...

  2. 【线性判别】Fisher线性判别(转)

    今天读paper遇到了Fisher线性判别的变体, 所以来学习一下, 所以到时候一定要把PRMl刷一遍呀 以下两篇论文一起阅读比较好: 论文1: https://blog.csdn.net/Rainb ...

  3. html-w3c规范及常见标签

    W3C提倡的web结构: 内容(HTML)与表现(css样式)分离 内容(HTML)与行为(JS)分离 HTML内容结构要求语义化 基本规范: 标签名和属性名称必须小写 HTML标签必须关闭 属性值必 ...

  4. SPA(单页面web应用程序)

    单页web应用(single page web application,SPA),就是只有一张web页面的应用,是加载单个HTML页面并在用户与应用程序交互时动态更新该页面的web应用程序. 浏览器一 ...

  5. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 phalcon3.2(3.0以上)版本不支持oracle的方法. https://github.com/phalcon/in ...

  6. filter-mapping中的dispatcher使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAAEJCAIAAABUr8bLAAAgAElEQVR4nO3dX2/bVoL3cb4h+WYnwN

  7. S16 day7 socket

    网络基础之网络协议篇:http://www.cnblogs.com/linhaifeng/articles/5937962.html 参考博客:http://www.cnblogs.com/linha ...

  8. python 从url中提取域名和path

    使用Python 内置的模块 urlparse from urlparse import * url = 'https://docs.google.com/spreadsheet/ccc?key=bl ...

  9. python高级内置函数和各种推导式的介绍:一行搞定的代码

    一.知识要点 all 都为真 any 有真的 min 最小的 max 最大的 sum 求和 reversed 反转 sorted 排序 zip 对应合并 [] 列表推倒式 () 生成器 {} 字典推倒 ...

  10. 018——VUE中v-for操作对象与数值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...