Pagini recente » Monitorul de evaluare | Cod sursa (job #1354021) | Cod sursa (job #3214302) | Cod sursa (job #1254602)
#include<fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
const int MAX=500005;
int i, h[MAX], n, k, a[MAX], m;
void upheap()
{
while (k>1 && h[k]<h[k/2])
{
swap(h[k], h[k/2]);
k/=2;
}
}
void downheap()
{
int nod;
do
{
nod=0;
if (k*2<=n) nod=k*2;
if (k*2+1<=n && h[2*k+1]<h[2*k])
nod=k*2+1;
if (h[nod]>=h[k]) nod=0;
if (nod)
{
swap(h[k], h[nod]);
k=nod;
}
} while (nod);
}
void cut() {
h[k] = h[n];
--n;
if ((k > 1) && (h[k] < h[k/2])) {
upheap();
} else {
downheap();
}
}
int main()
{
cin>>n; m=n;
for (i=1; i<=n; ++i)
{
cin>>h[i]; k=i; upheap();
}
for (i=1; i<=m; ++i)
{
k=1;
a[i]=h[1];
cut();
}
for (i=1; i<=m; ++i) cout<<a[i]<<' ';
return 0;
}