时间限制: 1 Sec  内存限制: 128 MB
提交: 18  解决: 9

题目描述

实现一种数据结构,维护以下两个操作: 
(1) I x :加入元素 x ; 
(2) M :输出当前表中相差最小的两个元素的差。 
一开始表为空,插入次数不超过 50000 ,插入的数字不超过 220−1 且都为正数,如果要插入的是前面已有的元素,则不处理。

输入

第一行为操作数,以下每行一种操作

输出

对于每个 M 的操作,输出对应的结果,每行一个数。

样例输入

5
I 1
I 10
M
I 6
M

样例输出

9
4
 
#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);
}
}

最新文章

  1. Azure上的那些IP
  2. HTML文档、javascript脚本的加载与解析
  3. [Linux] 常用Linux命令
  4. linux 压缩命令详解
  5. &lt;jsp:include&gt;和&lt;%@include file=&quot;&quot;%&gt;区别【131031】
  6. c# this关键字的理解
  7. saltstack之(二)软件包下载安装
  8. httpclient介绍
  9. DVB系统中PCR的生成和PCR校正
  10. php如何返回一个image文件
  11. Android Studio 1.0 苹果电脑安装配置
  12. 团队项目中js冲突
  13. ios 去掉字符串中的空格 和指定的字符
  14. CentOS 6.X启动流程
  15. JAVA操作证书
  16. FJOI2019 划水记
  17. 了解Activity生命周期
  18. 从html页面中抽取table表格数据
  19. PSP个人项目耗时对比记录表:四则运算
  20. how to know iframe is loaded in js

热门文章

  1. Windows10 图标重建
  2. 2017TSC世界大脑与科技峰会,多角度深入探讨关于大脑意识
  3. mysql语句insert后取到返回的主键id
  4. Linux中grep命令学习
  5. 基于腾讯云的Centos6.2系统搭建Apache+Mysql+PHP开发环境
  6. md5加密解析
  7. JBoss 主要模块
  8. Json及Json字符串
  9. 8.Java 加解密技术系列之 PBE
  10. Local模式下Spark程序只输出关键信息