思路与中位数一题,解决方案比较像,使用对顶堆来解决。

具体实现为,使用两个堆,大根堆维护较小的值,小根堆维护较大的值,即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的。

将大于大根堆堆顶的数(比所有大根堆中的元素都大)的数放入小根堆,小于等于大根堆堆顶的数(比所有小根堆中的元素都小)的数放入大根堆。

那么就保证了所有大根堆中的元素都小于小根堆中的元素。

如果将大根堆中元素个数维护为\(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】的更多相关文章

  1. 题解-CF436E Cardboard Box

    题面 CF436E Cardboard Box \(n\) 个关卡,对每个关卡可以花 \(a_i\) 时间得到 \(1\) 颗星,或花 \(b_i\) 时间得到 \(2\) 颗星,或不玩.问获得 \( ...

  2. 题解 CF1428A 【Box is Pull】

    通过理解题意,我们发现: 当需要拐弯的时候,兔子需要先走回箱子的位置,再走向拐弯的方向.则拐弯操作的花费为 \(2\) .而直行的操作花费为 \(1\) . 所以, 如果不需要拐弯,也就是 \(x1= ...

  3. Codeforces 436E Cardboard Box (看题解)

    Cardboard Box 贪了个半天贪不对, 我发现我根本就不会贪心. 我们先按b排序, 然后枚举选两颗心的b的最大值, 在这个之前的肯定都要选一个, 因为前面的要是一个都没选的话, 你可以把当前选 ...

  4. CF1428A Box is Pull 题解

    Content 有一个兔子拖着一个盒子在走,每秒钟可以带着盒子走一个单位,也可以不带着盒子走一个单位.当且仅当兔子和盒子的距离不超过 \(1\) 时可以带着盒子走一个单位.现给出 \(t\) 次询问, ...

  5. [codeforces 241]C. Mirror Box

    [codeforces 241]C. Mirror Box 试题描述 Mirror Box is a name of a popular game in the Iranian National Am ...

  6. 1297 - Largest Box(三分)

    1297 - Largest Box   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB In t ...

  7. usaco training 4.1.1 麦香牛块 题解

    Beef McNuggets题解 Hubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is cons ...

  8. BOX

    题目连接:http://acm.tju.edu.cn/toj/showp2392.html2392.   Box Time Limit: 1.0 Seconds   Memory Limit: 655 ...

  9. 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)

    题面戳我 Solution 并不会做,看了下题解大概了解了.期望这个东西好难搞啊qwq 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\). 正着来会有很多不合法的情况, ...

随机推荐

  1. [ C++ ] set_new_handler解析

    当 operator new 中malloc返回值为0(NULL)时,表示分配内存失败(可能是因为内存不足), 此时会通过_callnewh()调用用户通过set_new_handler()设定的ne ...

  2. Perl入门(四)Perl的正则表达式

    正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求.高效的正则表达式,还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正则表达式内容/; 作用:查找匹配内容中是否 ...

  3. JavaWeb网上图书商城完整项目--发送邮件

    1.首先注册一个163邮箱 自己的邮箱地址是18780279472@163.com 登陆的密码是key@wy111***19 使用邮箱发邮件,邮件必须开启pop和smtp服务,登陆邮件 开启pop服务 ...

  4. 谈谈 Promise 以及实现 Fetch 的思路

    Promise 是异步编程的一种解决方案. Promise /** * 属性 */ Promise.length Promise.prototype /** * 方法 */ Promise.all(i ...

  5. vue-elemnt-admin源码学习

    vue-elemnt-admin源码学习 vue-element-admin是一个基于vue,element-ui的集成的管理后台.它的安装部分就不说了,按照官网的步骤一步步就可以执行了. https ...

  6. Python3笔记013 - 3.4 循环语句

    第3章 流程控制语句 3.4 循环语句 1.while 循环 # 带else的while循环,循环结束后执行,根据需要取舍else while 条件表达式: 循环体 else: 语句 a = 0 wh ...

  7. java语言进阶(五)_异常

    第一章 异常 1.1 异常概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了 ...

  8. td文字溢出显示省略号

    昨天遇到移动端表格td中文字溢出问题,写了溢出隐藏样式,居然没起作用! { overflow:hidden;//溢出隐藏 white-space:nowrap;//文字不换行 text-overflo ...

  9. 新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file——setting——project项目名——project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...

  10. 控制流程之while循环, for循环

    条件循环:while,语法如下 while 条件: # 循环体 # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件... # 如果条件为假,那么循环体不执行,循环终止死循环 基本使用 ...