Pagini recente » Cod sursa (job #2281396) | Cod sursa (job #1504535) | Cod sursa (job #1085736) | Cod sursa (job #1507922) | Cod sursa (job #827579)
Cod sursa(job #827579)
#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;
struct arbore
{
unsigned int x;
int poz;
};
arbore v[NMAX];
void scan()
{
in>>n;
}
void init()
{
for (int i=1;i<=NMAX;i++)
{
v[i].x=inf;
v[i].poz=0;
}
}
void addToTree(int a,int st,int dr,int k,int p)
{
if (st==dr)
{
v[k].x=a;
v[k].poz=p;
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)].x<v[(k<<1)+1].x)
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 sort()
{
while (v[1].x!=inf)
{
out<<v[1].x<<" ";
addToTree(inf,1,n,1,v[1].poz);
}
}
int main()
{
scan();
init();
add();
sort();
return 0;
}