第一次写对顶堆,实际运行时间居然这么低
样例
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
#define int long long
using namespace std;
void build(priority_queue<int> &qmax, priority_queue<int, vector<int>, greater<int>> &qmin, int k){
while(qmin.size()>k){
qmax.push(qmin.top());
qmin.pop();
}
while(qmin.size()<k && !qmax.empty()){
qmin.push(qmax.top());
qmax.pop();
}
}
void insert(priority_queue<int> &qmax, priority_queue<int, vector<int>, greater<int>> &qmin, int x){
if(qmin.empty() || x>qmin.top()) qmin.push(x);
else qmax.push(x);
}
void solve(){
priority_queue<int> qmax;
priority_queue<int, vector<int>, greater<int>> qmin;
int n, prob;cin>>n>>prob;
for(int i=1;i<=n;++i){
int x;cin>>x;
insert(qmax, qmin, x);
int award = max(1LL, i*prob/100);
build(qmax, qmin, award);
cout<<qmin.top()<<' ';
}
}
signed main(){
ios::sync_with_stdio;
cin.tie(0),cout.tie(0);
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}