importjava.util.Scanner;publicclassMain{staticintN=100010;staticint[] q =newint[N];publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);int n = sc.nextInt();int m = sc.nextInt();// 读入所有数据for(int i =0; i < n; i ++) q[i]= sc.nextInt();// 从底往上建堆for(int i = n -1; i >=0; i --)down(q, i, n);// 堆排序while(n >1){swap(q,0,--n);down(q,0, n);}// 输出排序值for(int i =0; i < n; i ++){System.out.print(q[i]+" ");}}// down操作,此操作位将i位置的值进行下沉到合适的位置staticvoiddown(int[] a,int i,int s){int l = i *2+1;while(l < s){int index = l +1< s && a[l +1]> a[l]? l +1: l;int b = a[index]> a[i]? index : i;if(b == i)break;swap(a, i, b);
i = b;
l = i *2+1;}}// up操作此操作用于将i位置的数上升到合适的位置staticvoidup(int[] a,int i){while(a[i]> a[(i -1)/2]){swap(a, i,(i -1)/2);
i =(i -1)/2;}}staticvoidswap(int[] a,int i,int j){int t = a[i];
a[i]= a[j];
a[j]= t;}}