zoukankan      html  css  js  c++  java
  • 黑匣子 对顶堆

    黑匣子 对顶堆

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

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

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

    黑匣子_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
    ", sm.top());
            pre=t+1;
            big.push(sm.top());
            sm.pop();
        }
        return 0;
    }
    
  • 相关阅读:
    SQL SELECT DISTINCT 语句
    SQL SELECT 语句
    SQL 语法
    Linux 命令大全
    MySQL 安装
    Nginx 安装配置
    linux yum 命令
    Linux 磁盘管理
    Linux 文件与目录管理
    Linux 用户和用户组管理
  • 原文地址:https://www.cnblogs.com/santiego/p/11225849.html
Copyright © 2011-2022 走看看