转载自 https://www.cnblogs.com/jkxsz2333/p/9513556.html
#include<bits/stdc++.h>
using namespace std;
int m;
int a[1000100];
void swap(int x, int y)
{
int t = a[x];
a[x] = a[y];
a[y] = t;
}
void siftdown(int i)
{
int t,flag=0;
while(i*2<=m&&flag==0)
{
if(a[i]>a[i*2])
t = i*2;
else
t = i;
if(i*2+1<=m)
{
if(a[t]>a[i*2+1])
t = i*2+1;
}
if(t!=i)
{
swap(t,i);
i=t;
}
else
flag=1;
}
}
void heapsort()
{
while(m>1)
{
swap(m,1);
m--;
siftdown(m);
}
}
int main()
{
std::ios::sync_with_stdio(false);
int num,n,i,j;
cin>>num>>m;
for(i=1;i<=m;i++)
{
cin>>a[i];
}
n=m;
for(i=m/2;i>=1;i--)
siftdown(i);
for(i=m+1;i<=num;i++)
{
int x;
cin>>x;
if(x>a[1])
{
a[1]=x;
for(j=m/2;j>=1;j--)
{
siftdown(j);
}
}
}
heapsort();
for(i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}