#include<iostream> #include<vector> #include<algorithm> using namespace std; class MaxHeap{ public: MaxHeap(vector<int> vec, int k){ data = new int[k]; size = k; for(int i=0;i<k;i++) data[i]=0; for(int i=0;i<k;i++){ data[i]=vec[i]; shiftUp(i); } for(int i=k;i<vec.size();i++){ if(vec[i]>data[0]) continue; data[0]=vec[i]; shiftDown(0); } } int extractMax(){ int max=data[0]; data[0]=data[size-1]; shiftDown(0); size--; return max; } void printHeap(){ vector<int> out; for(int i=0;i<size;i++) out.push_back(data[i]); sort(out.begin(),out.end()); for(int i=0;i<out.size();i++) cout<<out[i]<<" "; cout<<endl; } ~MaxHeap(){ delete [] data; data=nullptr; } private: void shiftUp(int i){ while(i>0 && data[i]>data[(i-1)/2]){ swap(data[i],data[(i-1)/2]); i=(i-1)/2; } } void shiftDown(int i){ while(2*i+1<size){ int j=2*i+1; if(j+1<size && data[j+1]>data[j]) j=j+1; if(data[i]>=data[j]) break; swap(data[i],data[j]); i=j; } } private: int * data; int size; }; int main(){ int n,k,temp; vector<int> input; while(cin>>n>>k){ input.clear(); while(n--){ cin>>temp; input.push_back(temp); } MaxHeap heap(input,k); heap.printHeap(); } return 0; }