(其实今天好热啊?

  题目大意:插入,删除,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暖暖手)相关推荐

  1. bzoj3224: Tyvj 1728 普通平衡树(splay)

    3224: Tyvj 1728 普通平衡树 题目:传送门 题解: 啦啦啦啦又来敲个模版水经验啦~ 代码: 1 #include<cstdio> 2 #include<cstring& ...

  2. bzoj3224 Tyvj 1728 普通平衡树题解--Treap

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

  3. 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树

    冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...

  4. 3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 14480  Solved: 6275 Descripti ...

  5. BZOJ 3224: Tyvj 1728 普通平衡树 treap

    3224: Tyvj 1728 普通平衡树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  6. BZOJ 3224: Tyvj 1728 普通平衡树【Treap】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一些数 ...

  7. BZOJ 3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 9629  Solved: 4091 [Submit][S ...

  8. Treap树堆(bzoj 3224: Tyvj 1728 普通平衡树)

    Treap树堆:一种排序二叉树(中序遍历权值有序) 每个节点有两个关键字:key[]和rand[] 其中key[]满足二叉搜索树性质,rand[]满足堆性质(即Tree+Heap=Treap)即 如果 ...

  9. bzoj:3224: Tyvj 1728 普通平衡树

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

最新文章

  1. catia 安装打开闪退_win10catia r20应用程序无法正常启动的解决办法
  2. Pass4side CompTIA PK0-002题库下载
  3. 连续连通域检测算法的MATLAB仿真
  4. apache添加支持php的模块,配置Apache支持PHP5 apache php 套件 apache添加php模块 apache部署php项...
  5. python程序员脱单攻略_520 情人节 :属于 Python 程序员的脱单攻略大合集(视频版)...
  6. Linux内核调试的方式以及工具集锦
  7. linux内核 端口,Linux内核中IO端口资源管理
  8. cenyos7安装 yum不可用_小区阳台隐形网横管不可用扁管,要改再去安装,还有问题...
  9. HDU5667 - Sequence 矩阵快速幂 + 费马小定理
  10. 21、随机调整锐度 transforms.RandomAdjustSharpness()
  11. 【FPGA - 基础知识(零)】FPGA芯片资源介绍
  12. 空气质量指数(AQI)分析与预测
  13. 树莓派python物体识别_基于树莓派和Tensowflow的物体识别
  14. 【DataWhale学习】Day10~13-4章决策树——西瓜书学习摘录笔记
  15. seq2seq到attention到transformer理解
  16. 关于单词:On-premises的含义
  17. 固态继电器和可控硅的区别
  18. 细说Kconfig(转)
  19. 访问网络内不同ip段的计算机,[转]问题:话说两台电脑在一个局域网内,把它们的IP地址都设成不同的网段,请问,它们可不可以通讯?如...
  20. 英特尔前高管的IC职业生涯分享(文字版)写给想进入IC设计的同学们!

热门文章

  1. 转 Android的Activity屏幕切换动画(一)-左右滑动切换
  2. ASP.NET应用程序客户端执行的优化小技巧
  3. ThreadPoolExecutor线程池 + Queue队列
  4. 初步使用github,并上传下载文件
  5. 利用微信的weui框架上传、预览和删除图片
  6. 几个常用算法的适应场景及其优缺点
  7. Gradle复制文件/目录方法
  8. Ixia推出首款太比特级网络安全测试平台
  9. PHP的钩子实现解析
  10. Window 通过cmd查看端口占用、相应进程、杀死进程等的命令【转】