你只需要一个小小的对顶堆
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
priority_queue <int> q1,q2;
int n,w;
int p;
void deal(int now){
int li=max(1,now*w/100);
if(q1.size()>li){
int ll=-q1.top();
q1.pop();
q2.push(ll);
return ;
}else{
if((!q2.empty())&&(-q1.top()<q2.top())){
int ll=-q1.top();
int lll=q2.top();
q1.pop();
q2.pop();
q2.push(ll);
q1.push(-lll);
return ;
}
}
}
int main(){
scanf("%d%d",&n,&w);
for(int i=1;i<=n;++i){
scanf("%d",&p);
q1.push(-p);
deal(i);
cout<<-q1.top()<<" ";
}
return 0;
}