码迷,mamicode.com
首页 > 其他好文 > 详细

黑匣子 对顶堆

时间:2019-07-22 15:05:49      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:turn   show   new   tps   space   href   clu   cst   using   

黑匣子 对顶堆

对顶堆,由一个小跟堆和一个大根堆组成,且满足小跟堆堆顶大于大根堆堆顶

-------
 -----  <-- 小跟堆
  ---
   -
   -
  ---
 -----  <-- 大根堆
-------

可以看出对顶堆满足从上自下一直递减的性质

黑匣子_NOI导刊2010提高 题面

而这道题要维护第\(i\)小,即是让我们维护一个对顶堆,使大根堆大小为\(i-1\),小跟堆的堆顶即是第\(i\)小。

#include <cstdio>
#include <queue>
#define MAXN 200002
using namespace std;
priority_queue<int> big;
priority_queue<int, vector<int>, greater<int> > sm;
int a[MAXN];
int hav[MAXN];
int main() {
    int m,n;
    scanf("%d %d", &m, &n);
    for(int i=1;i<=m;++i) scanf("%d", &a[i]);
    int pre=1,t;
    for(int i=1;i<=n;++i){
        scanf("%d", &t);
        for(int j=pre;j<=t;++j){
            big.push(a[j]);
            if(big.size()==i) sm.push(big.top()), big.pop(); // 维护大小i-1
        }
        printf("%d\n", sm.top());
        pre=t+1;
        big.push(sm.top());
        sm.pop();
    }
    return 0;
}

黑匣子 对顶堆

标签:turn   show   new   tps   space   href   clu   cst   using   

原文地址:https://www.cnblogs.com/santiego/p/11225849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!