题意:他的意思是从i=k开始一直到i=n时求每次的前i位的第k大的值,我们就可以设置一个小额、根堆,先读入k个数输出栈顶元素,然后在后来的n-k次我们每加入一个元素,比较一下他和栈顶元素的关系,如果大于栈顶元素就把栈顶元素删除,把他加入之后输出栈顶元素,如果小于的话直接输出栈顶元素就行。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
const int N=100005;
int n,k,x;
int main(){
cin>>n>>k;
priority_queue<int,vector<int>,greater<int> > p;
for(int i=1;i<=k;i++){
cin>>x;
p.push(x);
}
printf("%d\n",p.top());
for(int i=k;i<n;i++){
cin>>x;
if(x<=p.top()){
printf("%d\n",p.top());
}else{
p.push(x);
p.pop();
printf("%d\n",p.top());
}
}
return 0;
}