bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)
(其实今天好热啊?
题目大意:插入,删除,k小,前驱后继,数的排名。
splay和treap裸题...过几天补个treap的
splay:
#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #define which(x) (son[fa[x]][1]==x) using namespace std; const int extar[2]={2147483647,-2147483647}; int fa[100010],count[100010],son[100010][3],val[100010],data[100010]; int root,x,y,n,tot,xiugai; void read(int &k) {k=0;int f=1;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f; } void rotate(int x) {int f=fa[x];bool k=which(x);son[f][k]=son[x][!k];son[x][!k]=f;son[fa[f]][which(f)]=x;if(son[f][k])fa[son[f][k]]=f;fa[x]=fa[f];fa[f]=x;count[x]=count[f];count[f]=count[son[f][0]]+count[son[f][1]]+val[f]; } void splay(int x,int g) {while(fa[x]!=g){int f=fa[x];if(fa[f]==g){rotate(x);break;}if(which(x)^which(f))rotate(x);else rotate(f);rotate(x);}if(!g)root=x; } int search(int x,int y) {if(data[x]>y&&son[x][0])return search(son[x][0],y);if(data[x]<y&&son[x][1])return search(son[x][1],y);return x; } int ext(int x,int w) {int k=search(x,extar[w]);splay(k,0);return data[k]; } int pred(int w) {int k=search(root,w);splay(k,0);if(data[k]<w)return data[k];return ext(son[k][0],0); } int succ(int x) {int k=search(root,x);splay(k,0);if(data[k]>x)return data[k];return ext(son[k][1],1); } int rank(int x,int k) {if(k<=count[son[x][0]])return rank(son[x][0],k);if(k<=(count[son[x][0]]+val[x]))return x;return rank(son[x][1],k-count[son[x][0]]-val[x]); } int findnum(int x) {int k=search(root,x);splay(k,0);return count[son[k][0]]+1; } void insert(int &x,int w,int f) {if(!x){x=++tot;count[x]=val[x]=1;data[x]=w;fa[x]=f;xiugai=tot;return;}if(data[x]==w)val[x]++,xiugai=x;if(data[x]<w)insert(son[x][1],w,x);if(data[x]>w)insert(son[x][0],w,x);count[x]++; } void del(int w) {int k=search(root,w);splay(k,0);if(data[k]==w){if(val[k]>1)val[k]--,count[k]--;elseif(!son[k][0]){root=son[k][1];fa[root]=fa[k]=son[k][1]=count[k]=val[k]=data[k]=0;}else{fa[son[k][0]]=0;ext(son[k][0],0);son[root][1]=son[k][1];if(son[k][1])fa[son[k][1]]=root;count[root]+=count[son[k][1]];fa[k]=son[k][0]=son[k][1]=data[k]=val[k]=count[k]=0;}} } int main() {read(n);for(int i=1;i<=n;i++){read(x);read(y);switch(x){case 1:insert(root,y,0);splay(xiugai,0);root=xiugai;break;case 2:del(y);break;case 3:printf("%d\n",findnum(y));break;case 4:printf("%d\n",data[rank(root,y)]);break;case 5:printf("%d\n",pred(y));break;case 6:printf("%d\n",succ(y));break;default:break;}} }
View Code
转载于:https://www.cnblogs.com/Sakits/p/6838764.html
bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)相关推荐
- bzoj3224: Tyvj 1728 普通平衡树(splay)
3224: Tyvj 1728 普通平衡树 题目:传送门 题解: 啦啦啦啦又来敲个模版水经验啦~ 代码: 1 #include<cstdio> 2 #include<cstring& ...
- bzoj3224 Tyvj 1728 普通平衡树题解--Treap
题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有 ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 14480 Solved: 6275 Descripti ...
- BZOJ 3224: Tyvj 1728 普通平衡树 treap
3224: Tyvj 1728 普通平衡树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3224: Tyvj 1728 普通平衡树【Treap】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一些数 ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 9629 Solved: 4091 [Submit][S ...
- Treap树堆(bzoj 3224: Tyvj 1728 普通平衡树)
Treap树堆:一种排序二叉树(中序遍历权值有序) 每个节点有两个关键字:key[]和rand[] 其中key[]满足二叉搜索树性质,rand[]满足堆性质(即Tree+Heap=Treap)即 如果 ...
- bzoj:3224: Tyvj 1728 普通平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...
最新文章
- catia 安装打开闪退_win10catia r20应用程序无法正常启动的解决办法
- Pass4side CompTIA PK0-002题库下载
- 连续连通域检测算法的MATLAB仿真
- apache添加支持php的模块,配置Apache支持PHP5 apache php 套件 apache添加php模块 apache部署php项...
- python程序员脱单攻略_520 情人节 :属于 Python 程序员的脱单攻略大合集(视频版)...
- Linux内核调试的方式以及工具集锦
- linux内核 端口,Linux内核中IO端口资源管理
- cenyos7安装 yum不可用_小区阳台隐形网横管不可用扁管,要改再去安装,还有问题...
- HDU5667 - Sequence 矩阵快速幂 + 费马小定理
- 21、随机调整锐度 transforms.RandomAdjustSharpness()
- 【FPGA - 基础知识(零)】FPGA芯片资源介绍
- 空气质量指数(AQI)分析与预测
- 树莓派python物体识别_基于树莓派和Tensowflow的物体识别
- 【DataWhale学习】Day10~13-4章决策树——西瓜书学习摘录笔记
- seq2seq到attention到transformer理解
- 关于单词:On-premises的含义
- 固态继电器和可控硅的区别
- 细说Kconfig(转)
- 访问网络内不同ip段的计算机,[转]问题:话说两台电脑在一个局域网内,把它们的IP地址都设成不同的网段,请问,它们可不可以通讯?如...
- 英特尔前高管的IC职业生涯分享(文字版)写给想进入IC设计的同学们!