Pagini recente » Cod sursa (job #1891757) | Cod sursa (job #75281) | Cod sursa (job #935428) | Cod sursa (job #2525588) | Cod sursa (job #2314182)
#include <fstream>
#include<limits.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500004], ai[20000005];
void build(int nod, int st, int dr)
{
if (st == dr)
{
ai[nod] = st;
return;
}
else
{
int mij = (st + dr)/2;
build(2 * nod, st, mij);
build(2 * nod + 1, mij + 1, dr);
if(v[ai[2*nod]]<v[ai[2*nod+1]])
{
ai[nod]=ai[2*nod];
}
else
{
ai[nod]=ai[2*nod+1];
}
}
}
void update(int nod, int pozitie, int st, int dr)
{
if (st == dr)
{
ai[nod] = pozitie;
}
else
{
int mij = (st + dr)/2;
if (pozitie <= mij)
{
update(2 * nod, pozitie, st, mij);
}
else
{
update(2 * nod + 1, pozitie, mij + 1, dr);
}
if(v[ai[2*nod]]<v[ai[2*nod+1]])
{
ai[nod]=ai[2*nod];
}
else
{
ai[nod]=ai[2*nod+1];
}
}
}
int main()
{
int N,i;
fin>>N;
for(i=1;i<=N;i++)
{
fin>>v[i];
}
build(1,1,N);
for(i=1;i<=N;i++)
{
fout<<v[ai[1]]<<" ";
v[ai[1]]=INT_MAX;
update(1,ai[1],1,N);
}
fin.close();
fout.close();
return 0;
}