Pagini recente » Cod sursa (job #1716236) | Cod sursa (job #95172) | Cod sursa (job #1242319) | Cod sursa (job #2621294) | Cod sursa (job #2301137)
#include <fstream>
#include <climits>
using namespace std;
const int maxN=5e5+1;
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]=INT_MAX;
update(1,1,n,where);
}
return 0;
}