Pagini recente » Cod sursa (job #219110) | Cod sursa (job #2828865) | Cod sursa (job #792467) | Cod sursa (job #1912939) | Cod sursa (job #1451755)
#include <bits/stdc++.h>
using namespace std;
vector<vector<int> >seq;
vector<int> aux,V;
int N,val;
void Read()
{
scanf("%d",&N);
seq.push_back(aux);
V.resize(N);
for(int i = 0; i < N; ++i)
scanf("%d",&V[i]);
int crt = 0,i,j;
while(crt < N){
i = crt;
j = crt;
while(i+1 < N && V[i] < V[i+1])++i;
while(j+1 < N && V[j] > V[j+1])++j;
if(i > j){
aux.resize(i-crt+1);
for(int k = crt; k <= i; ++k)
aux[k-crt] = V[k];
seq.push_back(aux);
crt = i + 1;
continue;
}
aux.resize(j-crt+1);
for(int k = crt; k <= j; ++k)
aux[k-crt] = V[k];
reverse(aux.begin(),aux.end());
seq.push_back(aux);
crt = j + 1;
}
}
void Seq_merge_sort(int li,int lf)
{
if(li == lf)
return;
int m = li + ((lf - li) >> 1);
Seq_merge_sort(li,m);
Seq_merge_sort(m+1,lf);
aux.resize(seq[li].size() + seq[m+1].size());
merge(seq[li].begin(),seq[li].end(),seq[m+1].begin(),seq[m+1].end(),aux.begin());
seq[li] = aux;
aux.resize(0);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
Read();
Seq_merge_sort(1,(int)seq.size()-1);
for(auto it : seq[1])
printf("%d ",it);
return 0;
}