【bzoj3223】文艺平衡树
- #include<bits/stdc++.h>
- #define N 300005
- #define rat 4
- using namespace std;
- struct Node{
- int size,val,rev;
- Node *lc,*rc;
- Node(int s,int v,Node *a,Node *b):size(s),val(v),lc(a),rc(b),rev(){}
- Node(){}
- }*nul,*rt,*st[N],t[N];
- int n,m,l,r,cnt,a[N];
- inline void pushup(Node *o){
- if(o->lc->size)o->size=o->lc->size+o->rc->size;
- }
- inline void pushdown(Node *o){
- if(o->rev){
- o->lc->rev^=;o->rc->rev^=;o->rev^=;
- swap(o->lc,o->rc);
- }
- }
- inline Node* newnode(int s,int v,Node *a,Node *b){
- return &(*st[cnt++]=Node(s,v,a,b));
- }
- Node * build(int l,int r){
- if(l==r)return newnode(,a[l],nul,nul);
- int mid=(l+r)>>;
- return newnode(r-l+,a[r],build(l,mid),build(mid+,r));
- }
- Node* merge(Node *a,Node *b){
- pushdown(a);pushdown(b);
- if(a->size>b->size*rat)return a->rc=merge(a->rc,b),pushup(a),a;
- if(b->size>a->size*rat)return b->lc=merge(a,b->lc),pushup(b),b;
- return newnode(a->size+b->size,b->val,a,b);
- }
- void split(int x,Node *o){
- pushdown(o);
- if(x>o->lc->size){
- split(x-o->lc->size,o->rc);o->lc=merge(o->lc,o->rc->lc);
- st[--cnt]=o->rc;o->rc=o->rc->rc;
- }
- else if(x<o->lc->size){
- split(x,o->lc);o->rc=merge(o->lc->rc,o->rc);
- st[--cnt]=o->lc;o->lc=o->lc->lc;
- }
- }
- void dfs(Node *o){
- pushdown(o);
- if(o->size==){if(o->val)printf("%d ",o->val);}
- else{dfs(o->lc);dfs(o->rc);}
- }
- inline int read(){
- int f=,x=;char ch;
- do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
- do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
- return f*x;
- }
- int main(){
- n=read();m=read();
- for(int i=;i<=n;i++)a[i]=i;
- for(int i=;i<=N;i++)st[i]=&t[i];
- nul=new Node(,,,);
- rt=build(,n+);
- while(m--){
- l=read(),r=read();l++;r++;
- split(r,rt);split(l-,rt->lc);
- rt->lc->rc->rev^=;
- }
- dfs(rt);
- return ;
- }
【bzoj3223】文艺平衡树的更多相关文章
- bzoj3223 文艺平衡树 (treap or splay分裂+合并)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
- BZOJ3223文艺平衡树——非旋转treap
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- [BZOJ3223]文艺平衡树 无旋Treap
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...
- BZOJ3223 文艺平衡树(splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- JZYZOJ1998 [bzoj3223] 文艺平衡树 splay 平衡树
http://172.20.6.3/Problem_Show.asp?id=1998 平衡树区间翻转的板子,重新写一遍,给自己码一个板子. #include<iostream> #incl ...
- bzoj3223 文艺平衡树
传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223 splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀) #include & ...
- [luogu3391][bzoj3223]文艺平衡树【splay】
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析 ...
- [bzoj3223]文艺平衡树(splay区间反转模板)
解题关键:splay模板题. #include<cstdio> #include<cstring> #include<algorithm> #include< ...
- bzoj3223 文艺平衡树 codevs3303 翻转区间
splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...
- [bzoj3223]文艺平衡树——splay
题意 你应当编写一个数据结构,支持以下操作: 反转一个区间 题解 我们把在数组中的位置当作权值,这样原序列就在这种权值意义下有序,我们考虑使用splay维护. 对于操作rev[l,r],我们首先把l- ...
随机推荐
- BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)
dp容易想到,但没法进一步优化了. 考虑贪心,每次选出价值最大的物品.但这显然是不对的因为会影响其他物品的选择. 于是考虑加上反悔操作.每次选出一个物品后,将其相邻两物品删除,再将原物品价值变为相邻两 ...
- CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法
使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...
- BZOJ3992:[SDOI2015]序列统计——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3992 https://www.luogu.org/problemnew/show/P3321 小C ...
- [bzoj] 2657 ZJOI2012 旅游 || bfs
原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于 ...
- GDI & GDI+
GDI GDI绘图中的映射模式CDC::SetMapMode() GDI编程小结 GDI+ GDI+小例子 关于GDI+ GDI+编程小结
- UVA.11300 Spreading the Wealth (思维题 中位数模型)
UVA.11300 Spreading the Wealth (思维题) 题意分析 现给出n个人,每个人手中有a[i]个数的金币,每个人能给其左右相邻的人金币,现在要求你安排传递金币的方案,使得每个人 ...
- poj2409:Let it Bead(置换群 polya定理)
题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理 ...
- 【P2602】【ZJOI2012】数字计数
传送门 Description 给定两个正整数\(a\)和\(b\),求在\([a,b]\)中的所有整数中,每个数码(\(digit\))各出现了多少次. Input 两个正整数\(a,b\) Out ...
- 【贪心】【UVA10905】 Children's Game
传送门 Description 给定n个正整数,求他们相连接后能形成的最大整数.例如:12,23这两个数能连接的最大数是2312,. Input 多组数据,每组数据中: 第一行为一个整数n 第二行有n ...
- openssl安装相关软件
出现:error: openssl/md5.h: No such file or directory 原因是libssl-dev 没有安装,执行: sudo apt-get install libss ...