题目传送门

  题目大意:完成一颗splay树。

  思路:模板题,学着还是很有意思的。

  学习splay树:蒟蒻yyb

  该题模板:汪立超

#include<bits/stdc++.h>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
int root,N=,n,p,q;
int fa[],c[][],size[],sp[];
void rot(int x) {
int y=fa[x],k=(c[y][]==x);
size[y]=size[c[y][k]]+size[c[x][k]]+;
size[x]=size[c[x][!k]]+size[y]+;
c[y][!k]=c[x][k];
fa[c[y][!k]]=y;
fa[x]=fa[y];
if(fa[y])c[fa[y]][c[fa[y]][]==y]=x;
c[x][k]=y;
fa[y]=x;
}
void rots(int x,int g) {//splay
for(int y=fa[x]; y!=g; rot(x),y=fa[x])
if(fa[y]!=g) rot((x==c[y][])==(y==c[fa[y]][])?y:x);
if(g==) root=x;
}
void insert(int x) {//插入
int y=root;
while(c[y][x>sp[y]]) y=c[y][x>sp[y]];
sp[++N]=x;
c[N][]=c[N][]=;
fa[N]=y;
if(y)c[y][x>sp[y]]=N;
rots(N,);
}
void del(int x) {//删除
int y=root;
while(sp[y]!=x) y=c[y][x>sp[y]];
rots(y,);
y=c[root][];
bool b;
if(!y) b=,y=c[root][];
else b=;
while(c[y][b]) y=c[y][b];
rots(y,root);
c[y][b]=c[root][b];
fa[c[root][b]]=y;
fa[y]=;
root=y;
size[y]=size[c[y][!b]]+size[c[y][b]];
}
int rank(int x) {//输出x的rank
int y=root,ans=;
if(x==) {
printf("");
}
while(y)
if(x>sp[y])
ans+=size[c[y][]]+,y=c[y][];
else y=c[y][];
return ans+;
}
int num(int x) {//排名第x的元素
int y=root;
while(x)
if(size[c[y][]]+<x)
x-=size[c[y][]]+,y=c[y][];
else if(size[c[y][]]+==x) return sp[y];
else y=c[y][];
return sp[y];
}
int pre(int x) {//输出前驱
int ans;
for(int y=root; y;)
if(sp[y]<x)
ans=sp[y],y=c[y][];
else y=c[y][];
return ans;
}
int nex(int x) {//输出后驱
int ans;
for(int y=root; y;)
if(sp[y]<=x)
y=c[y][];
else ans=sp[y],y=c[y][];
return ans;
}
int main() {
scanf("%d",&n);
for(int i=; i<=n; i++) {
scanf("%d%d",&p,&q);
if(p==) insert(q);
if(p==) del(q);
if(p==) printf("%d\n",rank(q));
if(p==) printf("%d\n",num(q));
if(p==) printf("%d\n",pre(q));
if(p==) printf("%d\n",nex(q));
}
return ;
}

bzoj3224 普通平衡树 splay模板的更多相关文章

  1. [luogu3369/bzoj3224]普通平衡树(splay模板、平衡树初探)

    解题关键:splay模板题整理. 如何不加入极大极小值?(待思考) #include<cstdio> #include<cstring> #include<algorit ...

  2. bzoj3224 普通平衡树(splay 模板)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 11427  Solved: 4878[Submit][St ...

  3. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  4. [bzoj3224]Tyvj 1728 普通平衡树——splay模板

    题目 你需要写一种数据结构支援以下操作. 插入元素. 删除元素. 查询元素的排名. 查询第k小的元素. 查询元素前趋. 查询元素后继. 题解 BBST裸题. 代码 #include <cstdi ...

  5. BZOJ3224:普通平衡树(Splay)

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...

  6. P3369 【模板】普通平衡树 (splay 模板)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多 ...

  7. 【BZOJ3224】Tyvj 1728 普通平衡树 Splay

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数 ...

  8. BZOJ3224 洛谷3369 Tyvj 1728 普通平衡树 splay

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3224 题意概括 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. ...

  9. BZOJ3224/洛谷P3391 - 普通平衡树(Splay)

    BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...

随机推荐

  1. mybatis 框架 的应用之四(一对一 与 一对多)

    lf-driver=com.mysql.jdbc.Driver lf-url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&u ...

  2. Log4J 配置 详解

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  3. 5.WHERE 子句

    WHERE 子句用于规定选择的标准. WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法 SELECT 列名称 FROM 表名称 WHERE 列 运 ...

  4. oracle使用PLSQL免安装客户端

    2. 下载Oracle Instant Client (32-bit) 只需要下载instantclient-basic-nt-11.2.0.3.0.zip就可以了,其它的都是一些根据不同需要扩展的包 ...

  5. Ajax——jQuery实现

    紧接上文 一.load()方法 load() 方法师jQuery中最为简单和常用的Ajax方法,能载入远程的HTML代码并插入到DOM中.它的机构是:load(url[,data][,callback ...

  6. 浅析C语言中assert的用法(转)

    原文地址:http://www.jb51.net/article/39685.htm 以下是对C语言中assert的使用方法进行了介绍,需要的朋友可以参考下. assert宏的原型定义在<ass ...

  7. Hyper-V和vmware在虚拟机中安装xen总结

    1. Hyper-V 在hyper-v中安装了ubuntu13.04,运行很好,使用起来的效果感觉比vmware要舒服.安装变异xen的内核也没有问题,可以正常的安装,update-grub之后也可以 ...

  8. 第04章-面向切面的Spring

    1. 什么是面向切面编程 AOP是什么 切面帮助我们模块化横切关注点. 横切关注点可被描述为影响应用[多处的]功能.如安全,应用许多方法会涉及安全规则. 继承与委托是最常见的实现重用 通用功能 的面向 ...

  9. POJ3041 Asteroids(二分图最小点覆盖)

    Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...

  10. 关于JAVA数组的几点注意事项与一些低级错误

    1.数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用.数组保存的仅仅是对象的引用,而不是对象本身. 2.数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型 ...