/*对顶堆
可以动态维护一个序列上第k大的数
对顶堆由一个大根堆与一个小根堆组成,小根堆维护前k大的数(包含第k个),大根堆维护比
第k大数小的数,
1.插入:
若插入的元素>=小根堆堆顶,则将其插入小根堆,否则将其插入大根堆
2.维护:
当小根堆的大小>K时,不断将小根堆堆顶取出并插入大根堆,直到小根堆的大小等于k
当小根堆的大小<k时,不断将大根堆堆顶元素取出并插入小根堆,直到小根堆的大小等于k
3.查询第k大元素: 小根堆堆顶元素
4.删除第k大元素:删除小根堆堆顶元素
*/
priority_queue<int>a;//大根堆,,从大到小
priority_queue<int,vector<int>,greater<int>>b;
//小根堆 从小到大
for(int i=1;i<=n;i++)
{
int x; cin>>x;
if(b.empty()||x>=b.top()) b.push(x);
else a.push(x);
while(b.size()>k) a.push(b.top()),b.pop();
while(b.size()<k) b.push(a.top()),a.pop();
cout<<b.top();
//b.pop();//删除
}