优先队列。。刚开始用蠢办法,经过一个vector容器中转,这么一来一回这么多趟,肯定超时啊。

超时代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <functional>
using namespace std;
#define N 30003 priority_queue<int,vector<int>,greater<int> > que;
int A[N];
vector<int> tmp; int main()
{
int m,n,i,j,th,u,k,h;
while(scanf("%d%d",&m,&n)!=EOF)
{
th = ;
for(i=;i<m;i++)
scanf("%d",&A[i]);
j = ;
k = ;
for(i=;i<n;i++)
{
scanf("%d",&u);
while(j<u)
{
que.push(A[k++]);
j++;
}
th++;
for(h=;h<th;h++)
{
tmp.push_back(que.top());
que.pop();
}
printf("%d\n",que.top());
for(h=;h<tmp.size();h++)
que.push(tmp[h]);
tmp.clear();
}
}
return ;
}

后来看了网上某位大牛的,说是用两个优先队列,一个从大到小的,一个从小到大的,元素在这两个中间中转,可以大大缩短时间。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <functional>
using namespace std;
#define N 30003 priority_queue<int,vector<int>,greater<int> > StoBig; //从小到大排,先出小的
priority_queue<int,vector<int>,less<int> > BtoSmall; //从大到小排,先出大的
int A[N]; int main()
{
int m,n,i,j,th,u,k,h;
while(scanf("%d%d",&m,&n)!=EOF)
{
th = ;
for(i=;i<m;i++)
scanf("%d",&A[i]);
j = ;
for(i=;i<n;i++)
{
scanf("%d",&u);
while(j<u)
BtoSmall.push(A[j++]);
th++;
while(BtoSmall.size() >= th) //语句1
{
StoBig.push(BtoSmall.top());
BtoSmall.pop();
}
printf("%d\n",StoBig.top());
BtoSmall.push(StoBig.top()); //还给它,保证语句1能够成立
StoBig.pop();
}
}
return ;
}

POJ 1442 Black Box -优先队列的更多相关文章

  1. POJ 1442 Black Box(优先队列)

    题目地址:POJ 1442 这题是用了两个优先队列,当中一个是较大优先.还有一个是较小优先. 让较大优先的队列保持k个.每次输出较大优先队列的队头. 每次取出一个数之后,都要先进行推断,假设这个数比較 ...

  2. poj 1442 Black Box(优先队列&Treap)

    题目链接:http://poj.org/problem?id=1442 思路分析: <1>维护一个最小堆与最大堆,最大堆中存储最小的K个数,其余存储在最小堆中; <2>使用Tr ...

  3. POJ 1442 Black Box treap求区间第k大

    题目来源:POJ 1442 Black Box 题意:输入xi 输出前xi个数的第i大的数 思路:试了下自己的treap模版 #include <cstdio> #include < ...

  4. poj 1442 Black Box(堆 优先队列)

    题目:http://poj.org/problem?id=1442 题意:n,m,分别是a数组,u数组的个数,u[i]w为几,就加到a几,然后输出第i 小的 刚开始用了一个小顶堆,超时,后来看了看别人 ...

  5. [ACM] POJ 1442 Black Box (堆,优先队列)

    Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7099   Accepted: 2888 Descrip ...

  6. 优先队列 || POJ 1442 Black Box

    给n个数,依次按顺序插入,第二行m个数,a[i]=b表示在第b次插入后输出第i小的数 *解法:写两个优先队列,q1里由大到小排,q2由小到大排,保持q2中有i-1个元素,那么第i小的元素就是q2的to ...

  7. POJ 1442 Black Box 堆

    题目: http://poj.org/problem?id=1442 开始用二叉排序树写的,TLE了,改成优先队列,过了.. 两个版本都贴一下吧,赚稿费.. #include <stdio.h& ...

  8. POJ 1442 Black Box

    第k大数维护,我推荐Treap..谁用谁知道....                                                           Black Box Time ...

  9. 数据结构(堆):POJ 1442 Black Box

    Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10658   Accepted: 4390 Descri ...

随机推荐

  1. <s:iterator>各种遍历用法

    struts2<S:iterator>遍历map小结 1.MapAction.java import java.util.ArrayList;   import java.util.Has ...

  2. CSS3边框温故

    1.简介:border属性在CSS1中就已经定义了,用来设置元素边框风格,设置不同的边框.颜色.粗细 2.基本属性,包括三个类型值:(1)border-width:设置元素边框的粗细,默认3~4px( ...

  3. H5实现的可自定义贪吃蛇游戏

    原创游戏,使用lufylegend.js开发 用canvas实现的贪吃蛇游戏,与一般的贪吃蛇游戏不同,图片经过美工设计,代码设计支持扩展和自定义. 游戏元素丰富,包括障碍物(仙人掌),金币(奖励),苹 ...

  4. CSS布局——横向两列布局

    1.固定两栏布局,使用float,注意对紧邻元素清除浮动影响.IE6在使用float布局同时设置横行margin的情况下会有双边距BUG,解决方案是加入_display:inline 代码如下: &l ...

  5. JS 节流

    作为前端的小白,在做项目的过程中,一般只考虑到实现功能,并没有考虑到性能的问题. 比如说,下拉加载更多的这个功能和resize()是特别耗费性能的.此时就要想到节流了. 节流:就是然一个函数无法在短时 ...

  6. Installation failed with message INSTALL_FAILED_UID_CHANGED.--APK安装失败解决方法

    出现此错误原因大都为:手机上原来APK存在残留,即没有卸载干净,导致不能安装新的APK 解决办法: 1.手机上手动卸载出现问题的APP,再重新安装 2.如果apk无法卸载,则将apk相关文件和相关内容 ...

  7. Android logcat

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 基本命令 logcat使用方法如下所示: [adb] logcat [<option>] ... [<f ...

  8. Git学习 --> 个人常用命令add,commit以及push

    Git命令行配置1 安装Github2 安装msysgit3 要配置用户名和油箱  git config --global user.name <用户名> 我的命令就是:git confi ...

  9. 多线程基础(三)NSThread基础

    3.多线程基础 NSThread的基本使用   如何使用NSThread创建新线程 创建线程之后是默认不执行的状态 创建三个线程:   通过name属性区别这些线程 接下来就是通过设置线程的优先级来设 ...

  10. 深入理解java虚拟机(4)---类加载机制

    类加载的过程包括: 加载class到内存,数据校验,转换和解析,初始化,使用using和卸载unloading过程. 除了解析阶段,其他过程的顺序是固定的.解析可以放在初始化之后,目的就是为了支持动态 ...