Cod sursa(job #2329456)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 26 ianuarie 2019 19:47:18
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define int long long

const int MV(5e5 + 5) ;

int v[MV], L[MV >> 1], R[MV >> 1], n ;

void merge(int st, int dr) {
  int mij = (dr + st) >> 1, i, j, k(st - 1) ;
  int n1 = mij - st + 1 ;
  int n2 = dr - mij ;
  for (i = 1 ; i <= n1 ; ++ i)
    L[i] = v[st + i - 1] ;
  for (i = 1 ; i <= n2 ; ++ i) {
    R[i] = v[mij + i] ;
  }
  i = j = 1 ;
  while (i <= n1 && j <= n2) {
    if (L[i] <= R[j]) {
      v[++ k] = L[i] ;
      ++ i ;
    } else {
      v[++ k] = R[j] ;
      ++ j ;
    }
  }
  while (i <= n1) {
    v[++ k] = L[i ++] ;
  }
  while (j <= n2) {
    v[++ k] = R[j ++] ;
  }
}

void mergesort(int st, int dr) {
  if (st >= dr)
    return ;
  mergesort(st, (dr + st) >> 1) ;
  mergesort(((dr + st) >> 1) + 1, dr) ;
  merge(st, dr) ;
}

int32_t main() {
  freopen("algsort.in", "r", stdin) ;
  freopen("algsort.out", "w", stdout) ;
  int i ;
  scanf("%lld", &n) ;
  for (i = 1 ; i <= n ; ++ i) {
    scanf("%lld", v + i) ;
  }
  mergesort(1, n) ;
  for (i = 1 ; i <= n ; ++ i) {
    printf("%lld ", v[i]) ;
  }
  return 0 ; }