Description
N Transaction i Black Box contents after transaction Answer 
      (elements are arranged by non-descending)   
1 ADD(3)      0 3   
2 GET         1 3                                    3 
3 ADD(1)      1 1, 3   
4 GET         2 1, 3                                 3 
5 ADD(-4)     2 -4, 1, 3   
6 ADD(2)      2 -4, 1, 2, 3   
7 ADD(8)      2 -4, 1, 2, 3, 8   
8 ADD(-1000)  2 -1000, -4, 1, 2, 3, 8   
9 GET         3 -1000, -4, 1, 2, 3, 8                1 
10 GET        4 -1000, -4, 1, 2, 3, 8                2 
11 ADD(2)     4 -1000, -4, 1, 2, 2, 3, 8   
Input
Output
Sample Input
7 4 3 1 -4 2 8 -1000 2 1 2 6 6
Sample Output
3 3 1 2
#include <cstdio>
#include <queue>
using namespace std;
int main()
{
    int a[30005],i,j,n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    	priority_queue <int , vector <int> , less<int> > p; //大的先
        priority_queue <int , vector <int> , greater<int> >q;//小的先
        int cut=0,x,c=0,t;
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        
        for(i=0; i<m; i++)
        {
            scanf("%d",&x);
            while(c<x)
            {
                q.push(a[c]);
                c++;
            }
            while(!p.empty()&&p.top()>q.top())  //保证第几小的数在q队列或p队列的顶部,然后计较一下两个的大小
            {
                t=p.top();
                p.pop();
                p.push(q.top());
                q.pop();
                q.push(t);
            }
            printf("%d\n",q.top());
            p.push(q.top());                                        
            q.pop();
        }
    }
    return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
poj1442 Black Box【优先队列,定义两个队列】
原文:http://blog.csdn.net/yuzhiwei1995/article/details/47155681