Pagini recente » Cod sursa (job #3255988) | Cod sursa (job #2170417) | Cod sursa (job #1307809) | Cod sursa (job #516449) | Cod sursa (job #2301136)
#include <fstream>
using namespace std;
const int maxN=5e5+1;
const int INF=1<<30;
int n;
int v[maxN];
int aint[4*maxN]; //nu stric memoria pe structuri
void build(int nod,int st,int dr){
if(st==dr){
aint[nod]=st;
return;
}
int mij=(st+dr)/2;
build(2*nod,st,mij);
build(2*nod+1,mij+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 pos){
if(st==dr){
aint[nod]=pos;
return;
}
int mij=(st+dr)/2;
if(pos<=mij){
update(2*nod,st,mij,pos);
} else {
update(2*nod+1,mij+1,dr,pos);
}
if(v[aint[2*nod]]<v[aint[2*nod+1]]){
aint[nod]=aint[2*nod];
} else {
aint[nod]=aint[2*nod+1];
}
}
int query(){
return aint[1];
}
int main(){
ifstream cin("algsort.in");
ofstream cout("algsort.out");
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i];
}
build(1,1,n);
for(int i=1;i<=n;i++){
int where=query();
cout<<v[where]<<" ";
v[where]=INF;
update(1,1,n,where);
}
return 0;
}