STL最大堆算法
http://blog.csdn.net/fdl19881/article/details/6685744
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<functional>
int n,m;
std::vector<int> men;
int in;
int main()
{
while (std::cin>>n>>m&&(m!=0||n!=0)){
if(m>=n){
for( int i = 0 ; i < n; ++i ){
std::cin>>in;
men.push_back(in);
}
std::sort(men.begin(),men.end(),std::greater<int>());
}else{
for( int i = 0 ; i < m; ++i ){
std::cin>>in;
men.push_back(in);
}
std::make_heap( men.begin() , men.end() , std::greater<int>() );
int i=m;
while(i!=n){
scanf("%d",&in);
if ( men.front() < in ){
std::pop_heap( men.begin() , men.end() , std::greater<int>() );
men.pop_back();
men.push_back(in);
std::push_heap( men.begin() , men.end() , std::greater<int>() );
}
i++;
}
std::sort_heap( men.begin() , men.end() , std::greater<int>() );
}
std::cout<<men[0];
for(int i=1;i!=m;i++){
std::cout<<" "<<men[i];
}
std::cout<<std::endl;
men.clear();
}
}