[平衡树] mingap
时间限制: 1 Sec 内存限制: 128 MB
提交: 18 解决: 9
题目描述
实现一种数据结构,维护以下两个操作:
(1) I x :加入元素 x ;
(2) M :输出当前表中相差最小的两个元素的差。
一开始表为空,插入次数不超过 50000 ,插入的数字不超过 220−1 且都为正数,如果要插入的是前面已有的元素,则不处理。
输入
第一行为操作数,以下每行一种操作
输出
对于每个 M 的操作,输出对应的结果,每行一个数。
样例输入
样例输出
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int n;
struct node
{
int key;
node *child[];
}bst[],*root,*pos;
queue<node*>mem;
void newnode(node* &r,int key)
{
if(mem.empty())r=pos++;
else r=mem.front(),mem.pop();
r->key=key;
r->child[]=r->child[]=NULL;
}
void insert(node* &r,int key)
{
if(r==NULL)newnode(r,key);
else insert(r->child[r->key<key],key);
}
bool exist(node* &r,int key)
{
if(r==NULL)return false;
if(r->key>key)return exist(r->child[],key);
else return (r->key==key)||exist(r->child[],key);
}
int mmin(node* &r,int key)
{
if(r==NULL)return key;
if(r->key<=key)return mmin(r->child[],key);
else
{
int s=mmin(r->child[],key);
if(s==key)return r->key;
}
}
int mmax(node* &r,int key)
{
if(r==NULL)return key;
if(r->key>=key)return mmax(r->child[],key);
else
{
int s=mmax(r->child[],key);
if(s==key)return r->key;
}
}
int main()
{
root=NULL;
pos=bst;
int i,j,num,ans=;
char s[];
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%s",s);
if(s[]=='I')
{
scanf("%d",&num);
if(i==)
{
insert(root,num);
continue;
}
if(root,exist(root,num))continue;
int a=mmin(root,num),b=mmax(root,num);
if(a==num)a=;if(b==num)b=;
ans=min(ans,min(abs(num-a),abs(num-b)));
insert(root,num);
}
else printf("%d\n",ans);
}
}
[平衡树] mingap的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- [普通平衡树treap]【学习笔记】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9046 Solved: 3840[Submit][Sta ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- 【Splay】bzoj3223-Tyvj1729文艺平衡树
一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...
- hiho #1329 : 平衡树·Splay
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...
- bzoj 3196: Tyvj 1730 二逼平衡树
#include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...
随机推荐
- 从C++ int类型的变量范围谈起
从学习C语言开始,int类型所占字节数,以及数值范围就是一个挥之不去的问题.一开始会死记硬背一个char 1个字节,一个字节8个bit.64位机器上面一个int 4个字节,32位机器上面不一样.那时候 ...
- 龟兔赛跑,杭电oj-2059
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2059 [Problem Description] 据说在很久很久以前,可怜的兔子经历了人生中最大的打击 ...
- liunx命令3
liunx系统目录结构 / /home /root /dev /usr /etc/ /boot /lib /var /tmp /proc /bin /sbin / 通常称为根分区,所有的文件和目录的起 ...
- 【2017-05-21】WebForm内置对象:Session、Cookie,登录和状态保持
1.Request -获取请求对象 string s =Request["key"]; 2.Response - 响应请求对象 Response.Redirect(" ...
- c# mvc如何生成excel
我们知道mvc可以通过js生成excel文件,同样在后台c#中一样可以生成excel文件. 首先我们要在后台中写如下方法: [HttpGet]public FileResult excel_gener ...
- 初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考
最近客户在逐步迁移应用从阿里云到Azure,这次又轮到一个PHP+MySQL应用了,顺便也记一下流水账. 需求:迁移部署在阿里云上的ECS服务器(系列2,IO优化+2核4G+50G的SSD云盘+10M ...
- Factoextra R Package: Easy Multivariate Data Analyses and Elegant Visualization
factoextra is an R package making easy to extract and visualize the output of exploratory multivaria ...
- OAuth 2.0 / RCF6749 协议解读
OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: R ...
- 编写原生Node.js模块
导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- CI Weekly #20 | 从持续集成的角度看 “云” 的价值
很多移动开发工程师对 fastlane 耳熟能详,最近 flow.ci 的 iOS 工作流「编译」这步已采用 fastlane gym 工具(iOS 应用打包签名自动化),进一步优化了构建打包速度.快 ...