Pagini recente » Cod sursa (job #1320721) | Cod sursa (job #2969214) | Cod sursa (job #2649704) | Cod sursa (job #1605446) | Cod sursa (job #2314709)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500010;
int n,m,aint[4 * N],v[N];
void build(int nod,int st,int dr)
{
if(st==dr){
aint[nod]=st;
return;
}
else{
int m=(st+dr)/2;
build(2*nod,st,m);
build(2*nod+1,m+1,dr);
if(v[aint[2*nod]]<v[aint[2*nod+1]])
aint[nod]=aint[2*nod];
else
aint[nod]=aint[2*nod+1];
}
}
void update(int nod,int st,int dr,int poz)
{
if(st==dr){
aint[nod]=poz;
}
else{
int m=(st+dr)/2;
if(poz<=m){
update(nod*2,st,m,poz);
}
else{
update(nod*2+1,m+1,dr,poz);
}
if(v[aint[2*nod]]<v[aint[2*nod+1]])
aint[nod]=aint[2*nod];
else
aint[nod]=aint[2*nod+1];
}
}
int main()
{
f >> n;
for(int i = 1; i <= n; i ++) {
f >> v[i];
}
build (1, 1, n);
for(int i = 1; i <= n; i ++) {
g << v[aint[1]] << ' ';
v[aint[1]] = INT_MAX;
update(1, 1, n, aint[1]);
}
return 0;
}