Pagini recente » Cod sursa (job #1258994) | Istoria paginii utilizator/fmi.a.prisacaru | Cod sursa (job #751464) | Cod sursa (job #1853648) | Cod sursa (job #2085390)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define lim 500010
int n,heap[lim],k;
void up (int nod)
{
if (nod>1 && heap[nod]<heap[nod/2])
{
swap (heap[nod], heap[nod/2]);
up (nod/2);
}
}
void adauga (int nod)
{
heap[++k]=nod;
up(k);
}
void down (int nod)
{
if (2*nod+1 <= n && (heap[2*nod]<heap[nod] || heap[2*nod+1]<heap[nod]))
if (heap[2*nod] < heap[2*nod+1])
{
swap (heap[nod], heap[2*nod]);
down(2*nod);
}
else
{
swap (heap[nod], heap[2*nod+1]);
down(2*nod+1);
}
else
if (2*nod<=n && heap[2*nod]<heap[nod])
swap (heap[nod], heap[2*nod]);
}
void sterge (int nod)
{
swap (heap[nod], heap[n]);
n--;
up(nod);
down(nod);
}
int main()
{
int x;
fin>>n;
for (int i=1; i<=n; i++)
{
fin>>x;
adauga(x);
}
for (int i=1; i<=k; i++)
{
fout<<heap[1]<<' ';
sterge(1);
}
fout.close();
return 0;
}