ACM时间复杂度之问题规模和可用算法
/**
给n个整数,从大到小输出前m大的数
*/
/*
#include <bits/stdc++.h>
using namespace std;
int a[1000001];
#define swap(a,b){int temp=a;a=b;b=temp;}
int n,m;
void bubble_sort(){//冒泡排序
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
}
//OJ每秒1亿次 ,而冒泡法O(n^2),当n=100万时,计算远远超过1亿次
int main()
{
while(~scanf("%d %d",&n,&m)){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
bubble_sort();
for(int i=n;i>n-m;i--){
if(i==n-m+1) printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
}
return 0;
}
*/
/*
#include <bits/stdc++.h>
using namespace std;
int a[1000001];
int n,m;
int main()
{
while(~scanf("%d %d",&n,&m)){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);//快速排序,O(nlog2n),当n=100万时,100万*log2(100万)约等于2000万
for(int i=n;i>n-m;i--){
if(i == n-m+1) printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
}
return 0;
}
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000001;
int a[MAXN];
//在输入数字t的时候,在a[500000+t]这个位置记录a[500000+t]=1,
//在输出的时候逐个检查a[i],如果a[i]等于1,表示这个数存在,打印出前m个数
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
memset(a,0,sizeof(a));//初始化
for(int i=0;i<n;i++){
int t;
scanf("%d",&t);
a[500000+t]=1;
}
for(int i=MAXN;m>0;i--){
if(a[i]){
if(m>1) printf("%d ",i-500000);
else printf("%d\n",i-500000);
m--;
}
}
}
return 0;
}