Pagini recente » Cod sursa (job #484188) | Cod sursa (job #1030394) | Cod sursa (job #2723588) | Cod sursa (job #2132930) | Cod sursa (job #2301203)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int aint[1100005],n,m,i,p,a,b,v[500005],k,q,ct,poz;
void update(int a,int b)
{int t;
t=k+a-1;
v[a]=b;
t=t/2;
while(t!=0)
{if(v[aint[t*2]]<v[aint[t*2+1]])aint[t]=aint[t*2];
else aint[t]=aint[t*2+1];
t=t/2;
}
}
int main()
{fin>>n;
for(i=1;i<=n;i++)
{fin>>v[i];
}
k=1;
while(k<n)
k=k*2;
for(i=k;i<k+n;i++)
{aint[i]=i-k+1;
}
for(i=k+n;i<k+k;i++)
aint[i]=0;
v[0]=(1<<31)-1;
for(i=k-1;i>=1;i--)
{if(v[aint[i*2]]<v[aint[i*2+1]])aint[i]=aint[i*2];
else aint[i]=aint[i*2+1];
}
q=1;
ct=0;
for(i=1;i<k+n;i++)
{ct++;
if(ct==q){ct=0;q=q*2;}
}
for(i=1;i<=n;i++)
{//fout<<aint[1]<<"* ";
fout<<v[aint[1]]<<" ";
update(aint[1],(1<<31)-1);
}
}