链接:Miku

------------------------

在做这个题之前我做了1168,所以该出来了个这

#include<iostream> 
#include<cstdio>
#include<algorithm>
#include<queue>

using namespace std;
 priority_queue <int,vector<int>,greater<int> > q1;//小顶 
 priority_queue <int,vector<int>,less<int> >q2;//大顶 
 queue <int>tol;
 int n,k;
int m; 
int a[2000006],u[2000006];
int x;
int f=1;
int tim;
int ans;
void get(int g){
    if(g<=q2.size()){
        for(int j=q2.size()-g+1;j;j--){
            tol.push(q2.top());
            q2.pop();
        }
        cout<<tol.front()<<endl;
        while(!tol.empty()){
            q2.push(tol.front());
            tol.pop();
        }
    }else{
        for(int j=g-q2.size();j;--j){
            tol.push(q1.top());
            q1.pop();
        }
        cout<<tol.front()<<endl;
        while(!tol.empty()){
            q1.push(tol.front());
            tol.pop();
        }
    }
    return ;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=m;++i){
        scanf("%d",&u[i]);
    }
    for(int i=1;i<=n;++i){
        k=a[i];
        if(i==1){
        q2.push(k);
        }
        else{
            if(q2.top()>k)
            q2.push(k);
            else
            q1.push(k);
        }
        if(q2.size()>q1.size()&&q2.size()-q1.size()>1){
            x=q2.top();
            q1.push(x);
            q2.pop();
        }
        if(q1.size()>q2.size()&&q1.size()-q2.size()>1){
            x=q1.top();
            q2.push(x);
            q1.pop();    
        }
        while(i==u[f]){
    //        cout<<3432<<endl;
            f++;
            tim++;
            get(tim);
        }
    }
//    cout<<f<<endl;
    return 0;
}
红黑配

相关文章: