Pagini recente » Cod sursa (job #1107810) | Cod sursa (job #607281) | Cod sursa (job #449902) | Cod sursa (job #1845907) | Cod sursa (job #1053996)
#include<fstream>
#define dim 500007
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int pos[dim],h[dim],N,i,a[dim],n;
inline int rs(int nod){
return 2*nod+1;
}
inline int ls(int nod){
return 2*nod;
}
void urca(int k){
while( k>1 && a[h[k>>1]]>a[h[k]]){
swap(pos[h[k]],pos[h[k>>1]]);
swap(h[k],h[k>>1]);
k>>=1;
}
}
void coboara( int nod){
int fiu=nod;
int rss=rs(nod);
int lss=ls(nod);
if(lss<=N && a[h[fiu]]>a[h[lss]] ){
fiu=lss;
}
if(rss<=N && a[h[fiu]]>a[h[rss]]){
fiu=rss;
}
if(nod!=fiu){
swap(pos[h[nod]],pos[h[fiu]]);
swap(h[fiu],h[nod]);
coboara(fiu);
}
}
void insert( int X ){
h[++N]=X;
pos[X]=N;
urca(pos[X]);
}
void erase( int X ){
swap(pos[h[X]],pos[h[N]]);
swap(h[X],h[N]);
--N;
coboara(X);
}
int main () {
f>>n;
for(i=1;i<=n;++i){
f>>a[i];
insert(i);
}
g<<a[h[1]]<<" ";
for(i=2;i<=n;++i){
erase(1);
g<<a[h[1]]<<" ";
}
return 0;
}