Pagini recente » Cod sursa (job #224023) | Cod sursa (job #524930) | Cod sursa (job #3259029) | Cod sursa (job #713712) | Cod sursa (job #2068719)
#include <iostream>
#include<fstream>
using namespace std;
#define N 500500
int h[N],i,n,x,m;
void up(int p)
{
while(p>1&&h[p]<h[p/2])
{
swap(h[p],h[p/2]);
p=p/2;
}
}
void down(int p)
{
while(2*p<n && ( h[p]>h[p*2] || h[p]>h[p*2+1] ) )
{
if(h[2*p]<h[2*p+1])
{
swap(h[2*p],h[p]);
p=p*2;
}
else
{
swap(h[2*p+1],h[p]);
p=p*2+1;
}
}
if(2*p<=n && h[2*p]<h[p])
{
swap(h[p],h[2*p]);
}
}
void add(int x)
{
h[++n]=x;
up(n);
}
int ans()
{
int X;
X=h[1];
swap(h[n],h[1]);
--n;
down(1);
return X;
}
int main()
{
ifstream f("algsort.in");
f>>m;
for(i=0;i<m;++i)
{
f>>x;
add(x);
}
ofstream g("algsort.out");
for(i=0;i<m;++i)
{
g<<ans()<<" ";
}
return 0;
}