优先队列的底层是大顶堆,改成小顶堆、全体压入、再弹出k个即可
注意权值相同时是并列的
#include<stdio.h>
#include<queue>
using namespace std;
int main(){
int n,k;
int temp;
while(scanf("%d",&n)!=EOF){
priority_queue<int,vector<int>,greater<int>> queue;
for(int i=0;i<n;i++){
scanf("%d",&temp);
queue.push(temp);
}
scanf("%d",&k);
if(k==1){
return queue.top();
} else {
int counter = 1;
int pre = queue.top();
queue.pop();
while(counter<=k){
int current = queue.top();
if(current!=pre) counter++;
if(counter==k) break;
queue.pop();
pre = current;
}
printf("%d\n",queue.top());
}
}
return 0;
}

京公网安备 11010502036488号