IT民工
加油!

大顶堆和小顶堆。

/*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;
    }
}
posted on 2012-07-30 17:24  找回失去的  阅读(177)  评论(0编辑  收藏  举报