大水题(bushi
思路:
新学到的一个骚东西,对顶堆(x)🤺堆(√)
构建一个大根堆,一个小根堆,每次根据人数控制小根堆的大小
如果输入数据大于小根堆的堆顶,就push到小根堆,反之就push到大根堆
AC代码
#include<bits/stdc++.h>
using namespace std;
priority_queue<int>ans1;
priority_queue<int,vector<int>,greater<int>>ans2;
int main()
{
int n,w;
cin>>n>>w;
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
if(ans2.empty()||a>ans2.top())
ans2.push(a);
else ans1.push(a);
int p=max(1,(int)(i*w/100));
while(ans2.size()<p)
{
ans2.push(ans1.top());
ans1.pop();
}
while(ans2.size()>p)
{
ans1.push(ans2.top());
ans2.pop();
}
cout<<ans2.top()<<" ";
}
cout<<endl;
return 0;
}