链接: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; }