一张图教会你~~~~
当时自己学的时候做的笔记,无非是操作步骤更加多了,大家可以看一下~~~
const int maxn=1e5+100;
int a[maxn],h[maxn],mysize;
void down(int u)
{
int t=u;
if(u*2<=mysize && a[u*2]<a[t]) t=2*u;
if(2*u+1<=mysize && a[2*u+1]<a[t]) t=2*u+1;
if(u!=t)
{
swap(a[u],a[t]);
down(t);
}
}
int main()
{
int n,m,i,j;
cin>>n>>m;
mysize=n;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=n/2;i;i--){
down(i);
}
while(m--)
{
cout<<a[1]<<" ";
a[1]=a[mysize--];
down(1);
}
return 0;
}

京公网安备 11010502036488号