Pagini recente » Cod sursa (job #2293550) | Cod sursa (job #899379) | Cod sursa (job #489778) | Cod sursa (job #1501041) | Cod sursa (job #1477718)
#include <cstdio>
#include <algorithm>
using namespace std;
int heap[500005];
int n;
int tata(int nr)
{
return nr/2;
}
void upcheck(int pos)
{
int t;
t=tata(pos);
while(t!=0&&heap[t]>heap[pos])
{
swap(heap[t],heap[pos]);
pos=t;
t=tata(pos);
}
}
void add(int nr)
{
heap[heap[0]]=nr;
upcheck(heap[0]);
}
void rem()
{
heap[1]=heap[heap[0]];
heap[0]--;
}
int stanga(int nr)
{
return 2*nr;
}
int dreapta(int nr)
{
return 2*nr+1;
}
void downcheck(int pos)
{
while(1)
{
int st=stanga(pos),dr=dreapta(pos);
int best=pos;
if(st<=heap[0])
{
if(heap[st]<heap[best])
{
best=st;
}
}
if(dr<=heap[0])
{
if(heap[dr]<heap[best])
{
best=dr;
}
}
if(best==pos) break;
else
{
swap(heap[best],heap[pos]);
pos=best;
}
}
}
int main()
{
freopen ("algsort.in","r",stdin);
freopen ("algsort.out","w",stdout);
scanf("%d",&n);
int nr;
for(int i=1;i<=n;i++)
{
heap[0]++;
scanf("%d",&nr);
add(nr);
}
for(int i=1;i<=n;i++)
{
printf("%d ",heap[1]);
rem();
downcheck(1);
}
}