[BZOJ3224] [Tyvj 1728] 普通平衡树 (treap)
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
Solution
哦,这道题几乎涵盖了treap所有操作。然后窝写挂了好~~~长时间
话说BZOJ1500窝是不是AC无望QAQ
#include <bits/stdc++.h>
using namespace std;
struct treap
{
int l, r, siz, key, val, pri;
}a[];
int root, ptot, ans; void push_up(int k)
{
a[k].siz = a[a[k].l].siz + a[a[k].r].siz + a[k].val;
} void lturn(int &k)
{
int tmp = a[k].r;
a[k].r = a[tmp].l, a[tmp].l = k;
a[tmp].siz = a[k].siz, push_up(k), k = tmp;
} void rturn(int &k)
{
int tmp = a[k].l;
a[k].l = a[tmp].r, a[tmp].r = k;
a[tmp].siz = a[k].siz, push_up(k), k = tmp;
} void insert(int &k, int x)
{
if(!k)
{
k = ++ptot, a[k].siz = a[k].val = ;
a[k].key = x, a[k].pri = rand();
return;
}
a[k].siz++;
if(x == a[k].key) a[k].val++;
else if(x < a[k].key)
{
insert(a[k].l, x);
if(a[k].pri < a[a[k].l].pri) rturn(k);
}
else
{
insert(a[k].r, x);
if(a[k].pri < a[a[k].r].pri) lturn(k);
}
} void del(int &k, int x)
{
if(!k) return;
if(x == a[k].key)
if(a[k].val > ) a[k].val--, a[k].siz--;
else if(!(a[k].l * a[k].r)) k = a[k].l + a[k].r;
else if(a[a[k].l].pri < a[a[k].r].pri)
lturn(k), del(k, x);
else rturn(k), del(k, x);
else if(x < a[k].key) a[k].siz--, del(a[k].l, x);
else a[k].siz--, del(a[k].r, x);
} int query_rank(int k, int x)
{
if(!k) return ;
if(x < a[k].key) return query_rank(a[k].l, x);
if(x == a[k].key) return a[a[k].l].siz + ;
return a[a[k].l].siz + a[k].val + query_rank(a[k].r, x);
} int query_num(int k, int x)
{
if(!k) return ;
if(x <= a[a[k].l].siz) return query_num(a[k].l, x);
if(x <= a[a[k].l].siz + a[k].val) return a[k].key;
return query_num(a[k].r, x - a[a[k].l].siz - a[k].val);
} void query_pro(int k, int x)
{
if(!k) return;
if(x <= a[k].key) query_pro(a[k].l, x);
else ans = a[k].key, query_pro(a[k].r, x);
} void query_sub(int k, int x)
{
if(!k) return;
if(x >= a[k].key) query_sub(a[k].r, x);
else ans = a[k].key, query_sub(a[k].l, x);
} int main()
{
int n, op, x;
scanf("%d", &n), srand(n);
while(n--)
{
scanf("%d%d", &op, &x);
if(op == ) insert(root, x);
if(op == ) del(root, x);
if(op == ) printf("%d\n", query_rank(root, x));
if(op == ) printf("%d\n", query_num(root, x));
if(op == ) ans = , query_pro(root, x), printf("%d\n", ans);
if(op == ) ans = , query_sub(root, x), printf("%d\n", ans);
}
return ;
}
[BZOJ3224] [Tyvj 1728] 普通平衡树 (treap)的更多相关文章
- [BZOJ3224]Tyvj 1728 普通平衡树
		
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
 - bzoj3224: Tyvj 1728 普通平衡树(平衡树)
		
bzoj3224: Tyvj 1728 普通平衡树(平衡树) 总结 a. cout<<(x=3)<<endl;这句话输出的值是3,那么对应的,在splay操作中,当父亲不为0的 ...
 - BZOJ 3224 TYVJ 1728 普通平衡树 [Treap树模板]
		
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 7390 Solved: 3122 [Submit][S ...
 - bzoj3224 Tyvj 1728 普通平衡树(名次树+处理相同)
		
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5354 Solved: 2196[Submit][Sta ...
 - BZOJ 3224: Tyvj 1728 普通平衡树 treap
		
3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...
 - bzoj3224: Tyvj 1728 普通平衡树(splay)
		
3224: Tyvj 1728 普通平衡树 题目:传送门 题解: 啦啦啦啦又来敲个模版水经验啦~ 代码: #include<cstdio> #include<cstring> ...
 - BZOJ3224 Tyvj 1728 普通平衡树(Treap)
		
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
 - 【权值线段树】bzoj3224 Tyvj 1728 普通平衡树
		
一个板子. #include<cstdio> #include<algorithm> using namespace std; #define N 100001 struct ...
 - BZOJ3224——Tyvj 1728 普通平衡树
		
1.题目大意:数据结构题,是treap,全都是treap比较基本的操作 2.分析:没啥思考的 #include <cstdio> #include <cstdlib> #inc ...
 
随机推荐
- MySQL创建带有编码的数据库
			
mysql> create database chao default character set utf8 collate utf8_general_ci;
 - 使用CentOS7配置Squid代理
			
其实之前配过一个squid,只是由于太懒,网上随便搜了一个教程,用了默认端口并且没有添加用户认证.某天不幸的被爬虫扫到,被用来发了半个月的垃圾邮件..直到有一天登录邮箱,看到了一大坨警告邮件,才意识到 ...
 - centos7时间同步
			
用ntpdate从时间服务器更新时间 1.如果你的linux系统根本没有ntpdate这个命令 yum install -y ntp 2.安装完了之后,你不要做什么配置,也不需要,直接测试一下 [ro ...
 - [翻译] 编写高性能 .NET 代码--第二章 GC -- 将长生命周期对象和大对象池化
			
将长生命周期对象和大对象池化 请记住最开始说的原则:对象要么立即回收要么一直存在.它们要么在0代被回收,要么在2代里一直存在.有些对象本质是静态的,生命周期从它们被创建开始,到程序停止才会结束.其它对 ...
 - C#委托与事件--简单笔记
			
委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...
 - LeetCode第五天
			
leetcode 第五天 2018年1月6日 22.(566) Reshape the Matrix JAVA class Solution { public int[][] matrixReshap ...
 - python 小练习之删除文件夹下的所有文件,包括子文件夹中的文件
			
先屡一下思路 一步步怎么实现 1 要求是要删除所有文件(只是删除文件 而不是文件夹),所以 我们肯定要遍历这个文件目录 (for in遍历) 2 每遍历一个元素时(文件),我们要判断该元素的属性是 ...
 - Luogu P1747 好奇怪的游戏
			
题目背景 <爱与愁的故事第三弹·shopping>娱乐章. 调调口味来道水题. 题目描述 爱与愁大神坐在公交车上无聊,于是玩起了手机.一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被 ...
 - bash文件的详细解读
			
一.bash的分类 1. 按生效范围分类 全局生效 /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人用户生效 ~/.bash_profile ~/.bas ...
 - 面试为什么需要了解JVM
			
匠心零度 转载请注明原创出处,谢谢! 说在前面 如果你经常注意面试题,你会发现现在面试题多多少少会含有jvm相关的面试题,之前也把一些jvm面试题汇总了下:面试题系列一,那么为什么现在面试需要了解或者 ...