黑匣子_KEY
黑匣子
(box.pas/c/cpp)
【 问题描述】
某研究小组成员想发明一个黑匣子( 当然不是飞机上那个), 而是一个具有特殊功能的箱子。 这个箱子具有两个功能: 1. 存放一些正整数 x; 2. 对于第 k 次询问, 它会告诉你箱子中第 k 小的数字是多少。 但光具有理论是不够的, 理论往往应联系实际。 这可是一个大大的难题, 没有丰富程序设计知识的同学们希望你能帮助他们写出这个程序代码, 以便他们能完成黑匣子的制作。
【 输入格式】
第一行, 一个数字 n 表示对黑匣子的操作次数。
以下 n 行, 每行一个数字。 若这个数字是正整数, 则表示在黑匣子中添加这个数字;
若这个数字是1, 这表示一次询问。
【 输出格式】
若干行, 对应每次询问所得的结果( 必定存在答案)
【 样例输入】
8
1
-1
8
8
-1
5
-1
-1
【 样例输出】
1
8
8
8
【 样例说明】
第一次询问时, 黑匣子内为 1, 输出最小的数 1;
第二次询问时, 黑匣子内为 1 8 8, 输出第二小的数 8;
第三次询问时, 黑匣子内为 1 5 8 8, 输出第三小的数 8;
第四次询问时, 黑匣子内为 1 5 8 8, 输出第四小的数 8。
【 数据范围】
对于30%的数据, 5<=n<=200
对于60%的数据, 5<=n<=10000
对于100%的数据, 5<=n<=100000, n为整数, x为不超过maxlongint的正整数。
这是一道典型的二叉搜索树(平衡树)的题目,但是我们也能用二叉堆的方法来过这道题。//膜拜Y’ADs
首先我们新建两个堆,一个是大根堆,一个是小根堆。
大根堆用于存储前K小个数,小根堆则用于存储其他数.
那么怎样来操作呢?
每读入一个数,与大根堆的TOP(堆头)比较,如果比它小,那么把大根堆的TOP放入小根堆,再将读入的数放入大根堆,即交换。
输出只需要输出小根堆TOP就好了。
再将输出的数从小根堆放入大根堆。
那么我来解释一下为什么可以这样操作。
首先我们已知的两个堆中,大根堆的所有数一定小于小根堆的所有数。大根堆中的数正是前K个数。
接着读入的数如果大于大根堆的TOP,那么这个数就比第K小的数大,只需要放入小根堆就成了(在读入-1时输出)。
但如果它小于大根堆的TOP,证明它小于第K小数。所以把大根堆的数取出来,将读入的数放进去。再将取出的数放入小根堆(在读入-1时输出)。
code:
priority_queue <int,vector<int>,greater<int> > x1;
priority_queue <int>x2; for(i=;i<=n;i++)
{
int x=read(),y;
if(x==-)
{
y=x1.top();
printf("%d\n",y);
x2.push(y);
x1.pop();
}
else
{
if(!x2.empty())
{
y=x2.top();
if(x<y){x2.pop();x2.push(x);x1.push(y);}
else x1.push(x);
}
else x1.push(x);
}
}
O(NlogN)
黑匣子_KEY的更多相关文章
- Luogu1801_黑匣子_KEY
题目传送门 借这道题练一下Treap和Splay的板子. code: #include <cstdio> #include <cstdlib> using namespace ...
- 塔吊力矩限制器,塔吊黑匣子,塔吊电脑,tower crane
塔机力矩限制器,tower crane 适用于各种类型的固定臂塔机和可变臂塔机 塔机力矩限制器是塔式起重机机械的安全保护装置,本产品采用32位高性能微处理器为硬件平台,软件算法采用国内最先进的三滑轮取 ...
- 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”
来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...
- 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)
[题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...
- P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- Luogu P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- 【洛谷P1801】黑匣子
黑匣子 题目链接 看到题解中“维护两个堆”,突然想到了这道题的解法 维护两个堆:大根堆h1, 小根堆h2 大根堆里的是最小的i个值,小根堆里是剩下的值 每Add一个值时 插入到小根堆中, 再比较小根堆 ...
- 洛谷 - P1801 - 黑匣子 - 对顶堆
这道题是提高+省选-的难度,做出来的话对数据结构题目的理解会增加很多. 可以使用一种叫做对顶堆的东西,对顶堆是在线维护第n小的logn的算法.大概的思路是,假如我们要找的是第n小,我们就维护一个大小为 ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
随机推荐
- 郝斌 SqlServer2005 学习笔记
1.0 什么是数据库 狭义:存储数据的仓库. 广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库. 另外一种说法:数据库是由表.关系.操作组成. 2.0 为什么要学习数据库 几乎所有的应用软 ...
- Swift3.0 调用C函数-_silen_name
一般情况下Swit要想调用obj-c,c或c++代码必须通过obj-c以及桥接文件才可以办到,但是使用@_silgen_name,可以对于某些简单的代码,直接跳过桥接文件和.h头文件与C代码交互. 创 ...
- 圆环,扇形控件基本算法一种实现 - 代码库 - CocoaChina_让移动开发更简单
圆环,扇形控件基本算法一种实现 - 代码库 - CocoaChina_让移动开发更简单 //// CircleCore.h// Quartz//// Created by 仙人掌 on 12 ...
- springMVC文件上传大小超过限制的问题
[转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...
- 阅读优秀的JAVA模板引擎Beetl的使用说明有感
由于项目需要,对包括Beetl在内的JAVA模板引擎技术进行了学习 Beetl是由国人李家智(昵称闲大赋)开发的一款高性能JAVA模板引擎,对标产品是Freemaker 感慨于近几年国内开源项目的蓬勃 ...
- ssh启动失败
调试了两个小时.ssh启动不了. service ssh start /etc/init.d/ssh start 都尝试了,还是没法启动. [ 是否启动,可以命令行: ps -s | grep ssh ...
- 解决iOS项目根目录下文件乱七八糟的问题
对于一个刚做项目的新手来说,肯定会碰到一个相当蛋疼的问题,那就是你在项目中建立的文件夹与你在根目录下的文件夹完全对应不起来,说直接点就是你通过group的方式在项目中建立的文件夹在本目录下根本就没有. ...
- spring注入bean的三种方法
在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...
- 控制DIV中的文字绝对居中
水平居中:<div align="center">Content</div> 垂直居中:<div style="line ...
- sharepoint2016安装OOS,OOS场负载均衡
Office Online Server is the successor to Office Web Apps Server. It may be connected to SharePoint, ...