Pagini recente » Cod sursa (job #688335) | Cod sursa (job #3221810) | Cod sursa (job #196904) | Cod sursa (job #1023423) | Cod sursa (job #1850954)
#include<fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
class Heap{
private:
int A[500001],K;
void rep(int i,int j){
swap(A[i],A[j]);
}
void upheap(int i){
if(i/2 && A[i] < A[i/2]){
rep(i/2,i);
upheap(i/2);
}
}
void downheap(int i){
if(2*i+1<=K && A[2*i+1] < A[i] && A[2*i+1]<=A[2*i]){
rep(i,2*i+1);
downheap(2*i+1);
}
else if(2*i<=K && A[2*i] < A[i]){
rep(i,2*i);
downheap(2*i);
}
}
public:
void insert(int x){
A[++K]=x;
upheap(K);
}
void pop(){
rep(1,K);
K--;
downheap(1);
}
int top(){
return A[1];
}
} H;
int main(){
int n;in>>n;
for(int i=1;i<=n;i++){
int x;in>>x;
H.insert(x);
}
for(int i=1;i<=n;i++){
int x=H.top(); H.pop();
out<<x<<' ';
}
return 0;
}