luogu P1801 黑匣子_NOI导刊2010提高(06)

做了一道对顶堆(反过来的)的练习。。很水

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
priority_queue<int,vector<int>,greater<int> >Q2;
priority_queue<int>Q1;
int a[N],b[N];
int main(){
    int m,n;
    scanf("%d%d",&m,&n);
    for(int i=1;i<=m;++i)scanf("%d",&a[i]);
    for(int i=1;i<=n;++i)scanf("%d",&b[i]);
    int cnt=0;
    for(int i=1;i<=m;++i){
        if(Q1.size()&&a[i]<Q1.top()){
            Q2.push(Q1.top());
            Q1.pop();
            Q1.push(a[i]);
        }
        else Q2.push(a[i]);
        while(b[cnt+1]==i){
            Q1.push(Q2.top());
            Q2.pop();
            printf("%d
",Q1.top());
            ++cnt;
        }
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Dream-Runner/p/10133678.html