Pagini recente » Cod sursa (job #2636240) | Cod sursa (job #2727003) | Cod sursa (job #3164816) | Cod sursa (job #2566275) | Cod sursa (job #2233063)
#include <stdio.h>
#include <vector>
using namespace std;
#define ll long long
vector<ll>l[500010];
vector<ll>aux;
void mergi(ll x,ll y){
ll i,j;
ll n=l[x].size();
ll m=l[y].size();
i=0;j=0;
while (i<n||j<m){
if (i<n&&j<m){
if (l[x][i]<l[y][j]){
aux.push_back(l[x][i]);
i++;
}
else{
aux.push_back(l[y][j]);
j++;
}
}
else
if (i<n){
aux.push_back(l[x][i]);
i++;
}
else if (j<m){
aux.push_back(l[y][j]);
j++;
}
}
l[x].clear();
l[y].clear();
for (i=0;i<=n+m;i++) l[x].push_back(aux[i]);
aux.clear();
}
int main()
{
ll n,x,i,j;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%lld",&n);
for (i=1;i<=n;i++) {
scanf("%lld",&x);
l[i].push_back(x);
}
for (i=2;i<=n;i*=2)
for (j=i;j<=n;j+=i){
mergi(j,j-i/2);
}
i/=2;
if (i<n){
j=i;
i/=2;
while (j<n){
if (j+i<=n){
j+=i;
mergi(j,j-i);
}
i/=2;
}
}
j=l[n].size();
for (i=0;i<n;i++) printf("%lld ",l[n][i]);
return 0;
}