Pagini recente » Cod sursa (job #336344) | Istoria paginii utilizator/beriangratian | Cod sursa (job #1339920) | Cod sursa (job #587569) | Cod sursa (job #751443)
Cod sursa(job #751443)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N=500006;
int h[N],nh;
void swap(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
void up(int p)
{
while(p>1 && h[p]<h[p/2])
{
swap(h[p],h[p/2]);
p=p/2;
}
}
void add(int val)
{
h[++nh]=val;
up(nh);
}
void down(int p)
{
int S=p*2,D=S+1,op=p;
if(S<=nh && h[S]<h[op])
op=S;
if(D<=nh && h[D]<h[op])
op=D;
if(op!=p)
{
swap(h[p],h[op]);
down(op);
}
}
void del (int p)
{
swap(h[p],h[nh--]);
up(p);
down(p);
}
int main()
{
int n,i,x;
in>>n;
for(i=1;i<=n;i++)
{
in>>x;
add(x);
}
while(n--)
{
out<<h[1]<<" ";
del(1);
}
return 0;
}