【题意】

1. 插入x数

2. 删除x数(若有多个相同的数,因只删除一个)

3. 查询x数的排名(若有多个相同的数,因输出最小的排名)

4. 查询排名为x的数

5. 求x的前驱(前驱定义为小于x,且最大的数)

6. 求x的后继(后继定义为大于x,且最小的数)

【算法】平衡树(treap)

重要的细节以注释的形式标注在代码中。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
struct tree{int l,r,sz,rnd,num;}t[maxn*2];
int n,sz,root;
void up(int k){t[k].sz=1+t[t[k].l].sz+t[t[k].r].sz;}
void lturn(int &k){int o=t[k].r;t[k].r=t[o].l;t[o].l=k;up(k);up(o);k=o;
}
void rturn(int &k){int o=t[k].l;t[k].l=t[o].r;t[o].r=k;up(k);up(o);k=o;
}
void ins(int &k,int x){if(!k){k=++sz;t[k].rnd=rand();t[k].num=x;t[k].sz=1;return;}//returnt[k].sz++;if(x<=t[k].num){ins(t[k].l,x);if(t[t[k].l].rnd<t[k].rnd)rturn(k);//turn
    }else{ins(t[k].r,x);if(t[t[k].r].rnd<t[k].rnd)lturn(k);}
}
void del(int &k,int x){//t[k].sz--;if(t[k].num==x){if(t[k].l*t[k].r==0){k=t[k].l+t[k].r;return;}if(t[t[k].l].rnd<t[t[k].r].rnd){rturn(k);t[k].sz--;del(t[k].r,x);}else{lturn(k);t[k].sz--;del(t[k].l,x);}}else if(x<t[k].num)t[k].sz--,del(t[k].l,x);else t[k].sz--,del(t[k].r,x);
}
int find(int k,int x){if(!k)return 0;//!kif(x<=t[k].num)return find(t[k].l,x);else return t[t[k].l].sz+1+find(t[k].r,x);
}
int rank(int k,int x){if(t[t[k].l].sz+1==x)return t[k].num;if(x<t[t[k].l].sz+1)return rank(t[k].l,x);else return rank(t[k].r,x-t[t[k].l].sz-1);
}
int pre(int k,int x){if(!k)return -1;if(t[k].num<x)return max(t[k].num,pre(t[k].r,x));else return pre(t[k].l,x);
}
int suc(int k,int x){if(!k)return 0x3f3f3f3f;if(t[k].num>x)return min(t[k].num,suc(t[k].l,x));else return suc(t[k].r,x);
}
int main(){srand(233);//srand!!!!!!!!!!scanf("%d",&n);sz=root=0;for(int i=1;i<=n;i++){int opt,x;scanf("%d%d",&opt,&x);if(opt==1)ins(root,x);if(opt==2)del(root,x);if(opt==3)printf("%d\n",find(root,x)+1);//+1if(opt==4)printf("%d\n",rank(root,x));if(opt==5)printf("%d\n",pre(root,x));if(opt==6)printf("%d\n",suc(root,x));}return 0;
}

View Code

转载于:https://www.cnblogs.com/onioncyc/p/7890314.html

【BZOJ】3224: Tyvj 1728 普通平衡树相关推荐

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

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

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

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

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

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

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

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

  5. 【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树

    平衡树的入门题目,也可以用Treap来实现,我觉得Treap的核心就是那个rand()了用来保证树不退化成链,同时还是有平衡树的特性..总体来说我觉得比较好些,而且比较快 #include <c ...

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

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

  7. bzoj 3224 Tyvj 1728 普通平衡树

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

  8. 3224: Tyvj 1728 普通平衡树

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

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

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

最新文章

  1. 阿里云双12服务器和阿里云双12数据库活动又开始了
  2. bootstrap解析-栅格系统
  3. ViewStub must have a valid layoutResource
  4. VS 2008 .NET Framework 3.5 Training Kit
  5. Linux环境下安装Redis
  6. reorder-list
  7. oracle财务软件凭证打印,金算盘财务软件后台数据库为Oracle
  8. php 清空一个数组_PHP工程师学Python数据类型
  9. java编程_Java编程和C语言的比较
  10. php 生成随机数组,利用php如何获取随机数组列表
  11. docker-hub改版之后死活无法生成删除镜像的解决方法
  12. 【测试沉思录】5. 测试人员如何快速熟悉新业务?
  13. 数据资料网站_更新......
  14. latex下载安装记录
  15. redis持久化(persistent)
  16. 五、数组(高琪java300集+java从入门到精通笔记)
  17. PNG alpha transparency: AlphaImageLoader filter flaws
  18. OpenAtom XuperChain开发者夏季论坛落幕,多位行业大咖共话开源区块链前景
  19. 带得动ps和python的笔记本_求一性价比高,轻薄,运行速度快,带得动ps,pr等软件的笔记本推荐...
  20. C# WinRar 解压缩

热门文章

  1. python命令大全-深度学习中python常用命令
  2. 如何更改linux文件的拥有者及用户组(chown和chgrp)
  3. rest-framework:频率控制
  4. Python网络爬虫与信息提取(一)(入门篇)
  5. php 按汉字首字母查询[转载]
  6. Spring-Boot项目部署到单独tomcat运行
  7. 开通域名绑定DDNS
  8. MyBatis之简单了解Plugin
  9. jquery 使用animate来改变高度自动添加样式overflow:hidden的问题
  10. Memcached常用命令及使用说明