题解 UVA501 【Black Box】
思路与中位数一题,解决方案比较像,使用对顶堆来解决。
具体实现为,使用两个堆,大根堆维护较小的值,小根堆维护较大的值,即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的。
将大于大根堆堆顶的数(比所有大根堆中的元素都大)的数放入小根堆,小于等于大根堆堆顶的数(比所有小根堆中的元素都小)的数放入大根堆。
那么就保证了所有大根堆中的元素都小于小根堆中的元素。
如果将大根堆中元素个数维护为\(i\)个,那么就可以直接访问大根堆堆顶,来得到从小到大的顺序排序后的第\(i\)个元素了。
\(code\):
#include<bits/stdc++.h>
#define maxn 200100
using namespace std;
priority_queue<int,vector<int>,less<int> > b;//大根堆
priority_queue<int,vector<int>,greater<int> > s;//小根堆
int n,m;
int a[maxn],u[maxn];
int cur=1,ii;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
cur=1;
ii=0;
while(!b.empty())
b.pop();
while(!s.empty())
s.pop();
memset(a,0,sizeof(a));
memset(u,0,sizeof(u));//清空
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=m;++i)
scanf("%d",&u[i]);
for(int i=1;i<=n;++i)
{
if(b.empty())//ADD命令
s.push(a[i]);
else
{
if(a[i]<b.top())
{
s.push(b.top());
b.pop();
b.push(a[i]);
}
else
s.push(a[i]);
}
while(u[cur]==i)//GET命令
{
ii++;
while(b.size()!=ii)//维护个数为i
{
int tmp=s.top();
s.pop();
b.push(tmp);
}
printf("%d\n",b.top());
cur++;
}
}
if(t)
printf("\n");
}
return 0;
}
题解 UVA501 【Black Box】的更多相关文章
- 题解-CF436E Cardboard Box
题面 CF436E Cardboard Box \(n\) 个关卡,对每个关卡可以花 \(a_i\) 时间得到 \(1\) 颗星,或花 \(b_i\) 时间得到 \(2\) 颗星,或不玩.问获得 \( ...
- 题解 CF1428A 【Box is Pull】
通过理解题意,我们发现: 当需要拐弯的时候,兔子需要先走回箱子的位置,再走向拐弯的方向.则拐弯操作的花费为 \(2\) .而直行的操作花费为 \(1\) . 所以, 如果不需要拐弯,也就是 \(x1= ...
- Codeforces 436E Cardboard Box (看题解)
Cardboard Box 贪了个半天贪不对, 我发现我根本就不会贪心. 我们先按b排序, 然后枚举选两颗心的b的最大值, 在这个之前的肯定都要选一个, 因为前面的要是一个都没选的话, 你可以把当前选 ...
- CF1428A Box is Pull 题解
Content 有一个兔子拖着一个盒子在走,每秒钟可以带着盒子走一个单位,也可以不带着盒子走一个单位.当且仅当兔子和盒子的距离不超过 \(1\) 时可以带着盒子走一个单位.现给出 \(t\) 次询问, ...
- [codeforces 241]C. Mirror Box
[codeforces 241]C. Mirror Box 试题描述 Mirror Box is a name of a popular game in the Iranian National Am ...
- 1297 - Largest Box(三分)
1297 - Largest Box PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB In t ...
- usaco training 4.1.1 麦香牛块 题解
Beef McNuggets题解 Hubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is cons ...
- BOX
题目连接:http://acm.tju.edu.cn/toj/showp2392.html2392. Box Time Limit: 1.0 Seconds Memory Limit: 655 ...
- 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)
题面戳我 Solution 并不会做,看了下题解大概了解了.期望这个东西好难搞啊qwq 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\). 正着来会有很多不合法的情况, ...
随机推荐
- Maven的pom文件依赖提示 ojdbc6 Missing artifact,需要手动下载并导入maven参考
eg: 需要 ojdbc6.jar 的下载地址 https://www.oracle.com/database/technologies/jdbcdriver-ucp-downloads.html c ...
- Java中的final关键字解析
一.final关键字的基本用法 1.修饰类 当用final修饰一个类时,表明这个类不能被继承.注意: final类中的成员变量可以根据需要设为final, final类中的所有成员方法都会被隐式地 ...
- android 抓取native层奔溃
使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置.这里我们可以下载已经编译好的工具 下载地 ...
- Springboot在包含有参构造方法的类中使用@Value注解取值
我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样 @Component class A { @Value("${user.value}") pr ...
- 使用docker创建rocketMQ容器
一.rocketMQ安装 (一)安装NameSrv 1.创建nameSrv数据挂载文件夹 mkdir -p /usr/data/rocketMQ/data/namesrv/logs mkdir -p ...
- js语法基础入门(5.2)
5.2.循环结构 当一段代码被重复调用多次的时候,可以用循环结构来实现,就像第一个实例中出现的场景一样,需要重复询问对方是否有空,这样就可以使用循环结构来搞定 5.2.1.for循环语句 //语法结构 ...
- js语法基础入门(1)
1.基础入门 1.1.hello world 1.1.1.JavaScript是什么? JavaScript是一门跨平台.面向对象的轻量级脚本语言,在web开发中被广泛应用 1.1.2.JavaScr ...
- JQ三种提示框:提示信息框、确认框、输入文本框
浏览器的三种提示框: alert()提示信息框 confirm()提示确认框 prompt()提示输入文本框 1.alert()提示信息框 效果: 实现代码: <script> alert ...
- code first 更新字段
protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn<string ...
- css如何设置不可点击?
通过设置元素的pointer-events属性设置为none,来实现元素不可点击.此方法是通过设置元素的鼠标事件失效来实现元素不可点击. css设置不可点击: css代码: .disable { po ...