5-24 寻找大富翁 (25分)
2015年胡润研究院的调查显示,截至2014年9月,个人资产在600万元以上高净值人群达290万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。
输入首先给出两个正整数NN(\le 10^6≤106)和MM(\le 10≤10),其中NN为总人数,MM为需要找出的大富翁数;接下来一行给出NN个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。
在一行内按非递增顺序输出资产排前MM位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。
#include<iostream> #include<cstdio> #include<math.h> #include<cstring> #include<climits> #include<string> #include<queue> #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<climits> #include<string> #include<queue> #include<stack> #include<set> #include<map> #include<list> #include<sstream> #include<algorithm> using namespace std; #define rep(i,j,k)for(i=j;i<k;i++) #define per(i,j,k)for(i=j;i>k;i--) #define MS(x,y)memset(x,y,sizeof(x)) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define ll long long const int INF=0x7ffffff; const int M=1e6+10; int i,j,k,n,m; ll a[M]; ll num; priority_queue<ll,vector<ll>,less<ll> >q; int main() { scanf("%d%d",&n,&m); for(i=0;i<n;i++){ scanf("%ld",&num); q.push(num); } k=0; printf("%d",q.top());q.pop(); k++; while(!q.empty()){ if(k==m)break; printf(" %d",q.top());q.pop(); k++; } printf("\n"); return 0; }