九度:テーマ1034:大金持ちを探す

1127 ワード

タイトルの説明:
浙江桐郷烏鎮にはn人がいます.この町の元m人の大金持ちを見つけてください.
入力:
複数組の試験用例を入力.
各例は、まず2つの整数n(0nとmが同時に0の場合は入力終了を示す.
出力:
烏鎮前のm個の大金持ちの財産数を出力してください.財産の多い列の前に、大金持ちがm個未満であれば、すべて出力して、各グループの出力は1行を占めます.
サンプル入力:
3 1
2 5 -1
5 3
1 2 3 4 5
0 0

サンプル出力:
5
5 4 3
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;  
     
int main()  
{  
	freopen("C:\\in.txt","r",stdin);
	int N,M;
	while(cin>>N>>M){
		if(!N&&!M)break;
		vector<int> money(N);
		for(int i=0;i<N;i++){
			cin>>money[i];
		}
		if(M>N)M=N;

		make_heap(money.begin(),money.end());
		
		for(int i=0;i<M;i++){
			if(i==M-1)cout<<money.front();
			else cout<<money.front()<<" ";
			pop_heap(money.begin(),money.end());
			money.pop_back();
		}
		cout<<endl;
	}
	return 0;  
}