bzoj 3223 文艺平衡树 splay 区间翻转
Tyvj 1728 普通平衡树
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 17715 Solved: 7769
[Submit][Status][Discuss]
Description
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
1. 插入x数
2. 删除x数(若有多个相同的数,因只删除一个)
3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
4. 查询排名为x的数
5. 求x的前驱(前驱定义为小于x,且最大的数)
6. 求x的后继(后继定义为大于x,且最小的数)
Input
第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<=opt<=6)
Output
对于操作3,4,5,6每行输出一个数,表示对应答案
Sample Input
1 106465
4 1
1 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
Sample Output
84185
492737
HINT
Source
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- #include<iostream>
- #include<cstdio>
- #define inf 1000000007
- #define N 100007
- #define ls c[p][0]
- #define rs c[p][1]
- using namespace std;
- inline int read()
- {
- int x=,f=;char ch=getchar();
- while(ch>''||ch<''){if (ch=='-') f=-;ch=getchar();}
- while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
- return x*f;
- }
- int n,m,rt;
- int fa[N],val[N],rev[N],mx[N],sz[N],flag[N],c[N][];
- inline void update(int p)
- {
- sz[p]=sz[ls]+sz[rs]+;
- }
- inline void pushdown(int p)
- {
- if (rev[p])
- {
- rev[p]^=;
- rev[ls]^=,rev[rs]^=;
- swap(c[p][],c[p][]);
- }
- }
- void rotate(int x,int &k)
- {
- int y=fa[x],z=fa[y],l,r;
- if (c[y][]==x) l=;else l=;r=l^;
- if (y==k) k=x;//交换后x就等于y
- else if (c[z][]==y) c[z][]=x;
- else c[z][]=x;
- fa[x]=z,fa[y]=x,fa[c[x][r]]=y;
- c[y][l]=c[x][r],c[x][r]=y;
- update(y),update(x);
- }
- void splay(int x,int &k)
- {
- while(x!=k)
- {
- int y=fa[x],z=fa[y];
- if (y!=k)
- {
- if (c[y][]==x^c[z][]==y) rotate(x,k);
- else rotate(y,k);
- }
- rotate(x,k);
- }
- }
- int find(int p,int num)
- {
- pushdown(p);
- if (sz[ls]>=num) return find(ls,num);
- else if (sz[ls]+==num) return p;
- else return find(rs,num-sz[ls]-);
- }
- void spin(int l,int r)
- {
- int x=find(rt,l),y=find(rt,r+);
- splay(x,rt),splay(y,c[x][]);
- int now=c[c[x][]][];
- rev[now]^=;
- }
- void build(int l,int r,int p)
- {
- if (l>r) return;
- if (l==r)
- {
- fa[l]=p,sz[l]=,val[l]=l;
- if (l<p) c[p][]=l;
- else c[p][]=l;
- return;
- }
- int mid=(l+r)>>;
- build(l,mid-,mid),build(mid+,r,mid);
- fa[mid]=p,val[mid]=mid;
- if (mid<p) c[p][]=mid;
- else c[p][]=mid;
- update(mid);
- }
- int main()
- {
- n=read(),m=read();
- build(,n+,),rt=(n+)>>;
- while(m--)
- {
- int x=read(),y=read();
- spin(x,y);
- }
- for (int i=;i<=n;i++)
- {
- int x=find(rt,i+);
- if (i==) cout<<val[x]-;
- else cout<<" "<<val[x]-;
- }
- }
bzoj 3223 文艺平衡树 splay 区间翻转的更多相关文章
- bzoj 3223 文艺平衡树 - Splay
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3884 Solved: 2235[Submit][Sta ...
- bzoj 3223 文艺平衡树 Splay 打标志
是NOI2003Editor的一个子任务 #include <cstdio> #include <vector> #define maxn 100010 using names ...
- [题解]bzoj 3223 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3884 Solved: 2235[Submit][Sta ...
- BZOJ 3223 文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 ...
- bzoj 1251序列终结者 splay 区间翻转,最值,区间更新
序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 4594 Solved: 1939[Submit][Status][Discuss] De ...
- BZOJ 3223 文艺平衡树 [codevs3303翻转区间]
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3223 通道2:http://codevs.cn/problem/3303/ 题目分析: 我 ...
- 文艺平衡树(区间翻转)(Splay模板)
这篇blog写的吼啊 #include<cstdio> #include<iostream> #include<cstring> using namespace s ...
- 洛谷 3391 【模板】文艺平衡树 Treap区间翻转
[题解] 用Treap维护这个序列. 加入的时候直接插入到末尾,这样Treap就变成一棵以插入时间先后为排序关键字的二叉搜索树. 对于翻转操作,我们分裂出需要翻转的区间,给这个区间的root打一个翻转 ...
- [bzoj3223]文艺平衡树(splay区间反转模板)
解题关键:splay模板题. #include<cstdio> #include<cstring> #include<algorithm> #include< ...
随机推荐
- Git-远程操作
远程分支:远程跟踪分支remote branch是对远程分支状态的引用,是不能移动的,它会根据远程分支变化以及网络通信自动移动.Git服务器包含了远程分支master,在My Computer中的re ...
- SQL数据库学习,常用语句查询大全
数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...
- Android Studio V4 V7 包冲突的问题
最近被包冲突的问题搞奔溃了,特别是V4,V7 V4和V7包冲突的解决方式就是!版本要一致!! 比如我的一个项目中应用本来是这样引用包的 compile 'com.android.support:sup ...
- HDU 5416 CRB and Tree (技巧)
题意:给一棵n个节点的树(无向边),有q个询问,每个询问有一个值s,问有多少点对(u,v)的xor和为s? 注意:(u,v)和(v,u)只算一次.而且u=v也是合法的. 思路:任意点对之间的路径肯定经 ...
- MFC技术积累——基于MFC对话框类的那些事儿2
3. 绘图 3.1 对话框资源编辑 首先通过添加控件的方式来创建一个简单的绘图对话框如图所示,创建步骤为: 第一.在VC++6.0软件环境的灰色空白区域右击,选中Controls,然后会弹出一个控件对 ...
- saltstack 源码安装
面向对象编程(oop) 面向对象: 面向对象三大特性: 封装 继承 多肽封装: 封装就是将具体的客观事物封装成抽象的类.并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可行的进行信息隐藏继承 ...
- index 定义 v-for 未使用变量 实际是没有 :key="index"
需要有 :key="index" <Checkbox :label="item.key" :key="index" v-for=&qu ...
- 部署 k8s Cluster(下)【转】
上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要 ...
- 0xc000007b——应用程序无法正常启动
0xc000007b——应用程序无法正常启动 原因:缺少exe程序启动所需要的DLL.
- python-opencv 分离图片(视频)中的某一颜色物体
看代码: import cv2 as cv import numpy as np def separate_color(frame): cv.imshow("原图", frame) ...