#include<stdio.h> #include<stdlib.h> voidswap(int &a, int &b){ int temp = a; a = b; b = temp; } voidadjust_heap(int *a, int cur, int n){ int left, right; while (true) { left = 2 * cur + 1; right = 2 * cur + 2; int index = cur; if (left < n && a[left] > a[index]) { index = left; } if (right < n && a[right] > a[index]) { index = right; } if (index != cur) { swap(a[cur], a[index]); cur = index; } else { break; } } } voidbuild_heap(int *a, int n){ for (int i = (n - 1) / 2; i >= 0; i--) { adjust_heap(a, i, n); } } voidheap_sort(int *a, int n){ build_heap(a, n); for (int i = n - 1; i > 0; i--) { swap(a[0], a[i]); adjust_heap(a, 0, i); } } intmain(){ int n, k, num; while(scanf("%d %d", &n, &k) != EOF) { int *a = newint[k]; for (int i = 0; i < n; i++) { scanf("%d", &num); if (i <= k - 1) { a[i] = num; if (i == k - 1) { build_heap(a, k); } } else { if (a[0] > num) { swap(a[0], num); adjust_heap(a, 0, k); } } } heap_sort(a, k); for (int i = 0; i < k - 1; i++) { printf("%d ", a[i]); } printf("%d\n", a[k - 1]); delete[] a; } return0; }