小根堆代码!!!
2025-10-18 11:04:09
发布于:上海
#include<bits/stdc++.h>
using namespace std;
int len=0;
int a[100005];
void put(int d){
int son,pa;
a[++len]=d;
son=len;
while(son>1){
pa=son/2;
if(a[son]>=a[pa])break;
else swap(a[son],a[pa]);
son=pa;
}
}
int get(){
int index=a[1];
a[1]=a[len--];
int son,pa=1;
while(pa*2<=len){
son=pa*2;
if(son<len&& a[son+1]<a[son])son++;
if(a[son]>=a[pa])break;
swap(a[son],a[pa]);
pa=son;
}
return index;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
put(x);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
这里空空如也











有帮助,赞一个