Pagini recente » Monitorul de evaluare | Cod sursa (job #3306869) | Cod sursa (job #832753) | Cod sursa (job #262233) | Cod sursa (job #2068692)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n,x,a[500009],nc,i;
void up(int p)
{
if(p>1&&a[p/2]>a[p])
{
swap(a[p/2],a[p]);
up(p/2);
}
}
void down(int p)
{
if(p*2+1<=nc&&(a[p*2]<a[p]||a[p*2+1]<a[p]))
{
if(a[p*2]<a[p*2+1])
{
swap(a[p],a[p*2]);
down(p*2);
}
else
{
swap(a[p],a[p*2+1]);
down(p*2+1);
}
}
else
if(p*2<=nc&&a[p*2]<a[p])
{
swap(a[p],a[p*2]);
down(p*2);
}
}
void add(int x)
{
a[++nc]=x;
up(nc);
}
void del(int p)
{
swap(a[p],a[nc]);
nc--;
up(p);
down(p);
}
int main()
{
fin>>n;
nc=0;
for(i=1;i<=n;i++)
{
fin>>x;
add(x);
}
while(nc)
{
fout<<a[1]<<" ";
del(1);
}
return 0;
}