Pagini recente » Cod sursa (job #2055153) | Cod sursa (job #1855998) | Cod sursa (job #286668) | Cod sursa (job #2093312) | Cod sursa (job #2095467)
#include <fstream>
#define Nmax 500002
#define inf 2000000000
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[Nmax],arb[4*Nmax],n;
void Read()
{
int i;
fin>>n;
for(i=1;i<=n;++i)
fin>>a[i];
}
int Build(int l,int r,int nod)
{
if(r==l){
arb[nod]=a[l];
return arb[nod];
}
int val1,val2,mid;
mid=l+(r-l)/2;
val1=Build(l,mid,2*nod);
val2=Build(mid+1,r,2*nod+1);
arb[nod]=min(val1,val2);
return arb[nod];
}
void Update()
{
int i=1;
while(2*i+1<=4*n&&(arb[2*i]!=0||arb[2*i+1]!=0))
if(arb[i]==arb[2*i])i=2*i;
else i=2*i+1;
arb[i]=inf;
i=i/2;
while(i>0){arb[i]=min(arb[2*i],arb[2*i+1]); i=i/2;}
}
void Sortare()
{
int k=1;
while(k<=n)
{
fout<<arb[1]<<" ";
Update();
++k;
}
}
int main()
{
Read();
Build(1,n,1);
Sortare();
return 0;
}