Pagini recente » Cod sursa (job #2620096) | Cod sursa (job #528641) | Cod sursa (job #1273032) | Cod sursa (job #2522827) | Cod sursa (job #843848)
Cod sursa(job #843848)
#include<fstream>
#define NMAX (1<<20)
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n;
const unsigned int inf=(1u<<31)+1;
unsigned int v[NMAX];
void scan()
{
in>>n;
}
void init()
{
for (int i=1;i<=NMAX;i++)
{
v[i]=inf;
}
}
void addToTree(int a,int st,int dr,int k,int p)
{
if (st==dr)
{
v[k]=a;
return;
}
int mij;
mij=((st+dr)>>1);
if (p<=mij)
{
addToTree(a,st,mij,(k<<1),p);
}
else addToTree(a,mij+1,dr,(k<<1)+1,p);
if (v[(k<<1)]<v[(k<<1)+1])
v[k]=v[k<<1];
else v[k]=v[(k<<1)+1];
}
void add()
{
int a;
for (int i=1;i<=n;i++)
{
in>>a;
addToTree(a,1,n,1,i);
}
}
void elim(int k,int st,int dr)
{
if (st==dr)
{
v[k]=inf;
return;
}
if (v[(k<<1)]<v[(k<<1)+1])
elim(k<<1,st,(st+dr)/2);
else elim((k<<1)+1,(st+dr)/2+1,dr);
if (v[(k<<1)]<v[(k<<1)+1])
v[k]=v[(k<<1)];
else v[k]=v[(k<<1)+1];
}
void sort()
{
while (v[1]!=inf)
{
out<<v[1]<<" ";
elim(1,1,n);
}
}
int main()
{
scan();
init();
add();
sort();
return 0;
}