分析:利用优先级队列,使优先级低的先输出。查找第k小的数,即让k-1小的数在优先队列中弹出。定义一个temp使其等于top(),当后面的数和前面数相等时,直接弹出。然后从2到k依使其等于top(),并弹出。此时最后一次的temp就是第k小的数,队列的第一个元素就是第k小的元素下一个数。
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
int main(){
int n;
while(cin>>n){
priority_queue<int,vector<int>,greater<int> > myPriorityQueue;
while(n--){
int x;cin>>x;
myPriorityQueue.push(x);
}
int k;cin>>k;
int temp = myPriorityQueue.top();
myPriorityQueue.pop();
for(int i = 2 ; i <= k;i++){
while(temp == myPriorityQueue.top()){
myPriorityQueue.pop();
}
temp = myPriorityQueue.top();
myPriorityQueue.pop();
}
cout<<temp<<endl;
}
return 0;
}