由于题目中说明没有重复数据,So使用直接定址法,输入完成就是排序完成.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define DELTA 500000
#define MAXN 1000011
int flag[MAXN];
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int n, m, v, mark;
while( ~scanf("%d %d", &n, &m) ) {
memset(flag, 0, sizeof(flag));
for(int i = 0; i < n; i ++) {
scanf("%d", &v); flag[v+DELTA] = 1;
}
v = MAXN; mark = 0;
while( --v >= DELTA && m ) {
if( flag[v] ) {
if( mark ++ ) {
printf(" ");
}
printf("%d", v-DELTA); m --;
}
}
printf("\n");
}
return 0;
}