POJ 1442 Black Box 优先队列 求前a[k]个数中第k大的数

来源:互联网 发布:一度教育java 编辑:程序博客网 时间:2024/05/21 08:39

维护两个队列,

开A

#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>#include <set>#include <map>#include <stack>#include <queue>using namespace std;int a[31000];int main(){    int m, n;    scanf("%d %d", &m, &n);    int i, j;    for(i = 0;i < m;i++){        scanf("%d", &a[i]);    }    int k;    priority_queue<int, vector<int>, less<int> >big;    priority_queue<int, vector<int>, greater<int> >small;    j = 0;    int t;    for(i = 1;i <= n;i++){        scanf("%d", &k);        while(j < k){            small.push(a[j]);            if(!big.empty()&&small.top() < big.top()){                t = big.top();                big.pop();                big.push(small.top());                small.pop();                small.push(t);            }            j++;        }        printf("%d\n", small.top());        big.push(small.top());        small.pop();    }    return 0;}


0 0
原创粉丝点击