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\n",Q1.top());
            ++cnt;
        }
    }
    return 0;
}
View Code

 

posted @ 2018-12-17 20:25  lqsno1  阅读(60)  评论(0编辑  收藏  举报