题解 | #【模板】堆#
【模板】堆
https://www.nowcoder.com/practice/13f61c8c92404f5ea5d6fa4c692869fb
一张图教会你~~~~
当时自己学的时候做的笔记,无非是操作步骤更加多了,大家可以看一下~~~
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; }