POJ 1442 Black Box

大顶堆和小顶堆。

/*Accepted    624K    157MS    C++    906B    2012-07-30 17:18:34*/

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>

#include<queue>

using namespace std;

const int MAXM = 30030;

int n, m;

int a[MAXM];

int main()

{

    while(scanf("%d%d", &m, &n) == 2)

    {

        int i, j, u;

        priority_queue< int, vector<int>, greater<int> > q1;

        priority_queue< int, vector<int>, less<int> > q2;

        for(i = 0; i < m ; i ++)

        {

            scanf("%d", &a[i]);

        }

        for(i = 0, j = 0; i < n; i ++)

        {

            scanf("%d", &u);

            for( ; j < u; j ++)

            {

                q1.push(a[j]);

                if(!q2.empty() && q1.top() < q2.top())

                    q1.push(q2.top()), q2.pop(), q2.push(q1.top()), q1.pop();

            }

            q2.push(q1.top());

            q1.pop();

            printf("%d\n", q2.top());

        }

        return 0;

    }

}

你可能感兴趣的:(poj)