Pagini recente » Cod sursa (job #1406240) | Cod sursa (job #1203121) | Cod sursa (job #820668) | Cod sursa (job #380188) | Cod sursa (job #3213913)
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 5e5+1;
int h[NMAX];
void coboara(int nh, int p){
int fs = 2*p, fd = 2*p + 1, bun = p;
if(fs <= nh && h[fs] < h[bun])
bun = fs;
if(fd <= nh && h[fd] < h[bun])
bun = fd;
if(bun != p){
swap(h[p], h[bun]);
coboara(nh, bun);
}
}
void urca(int p){
while(p > 1 && h[p] < h[p/2]){
swap(h[p], h[p/2]);
p/=2;
}
}
void sterge(int& nh, int p){
if(p == nh){
nh--;
}else{
swap(h[p], h[nh]);
nh--;
urca(p);
coboara(nh, p);
}
}
void adauga(int& nh, int val){
nh++;
h[nh] = val;
urca(nh);
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
int nr = 0;
for(int i = 0; i < n; i++){
int x;
fin >> x;
adauga(nr, x);
}
for(int i = n; i >= 1; i--){
fout << h[1] << " ";
sterge(nr, 1);
}
fin.close();
fout.close();
return 0;
}