Cod sursa(job #1814415)

Utilizator dementorrDementhor dementorr Data 23 noiembrie 2016 22:38:14
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

int n;
int v[100001];
int inter[100001];

int answer = 0;

void interclasare (int l1, int r1, int l2, int r2) {
  int k = 0;
  int i1 = l1, i2 = l2;
  
  while (i1 <= r1 && i2 <= r2) {
    if (v[i1] <= v[i2]) {
      inter[k++] = v[i1++];
    }
    else {      
      inter[k++] = v[i2++];
      answer += (r1 - i1 + 1) % 9917;
    }
  }

  while (i1 <= r1)
    inter[k++] = v[i1++];
  while (i2 <= r2) 
    inter[k++] = v[i2++];

  int i;
  for (i = l1; i <= r2; ++i)
    v[i] = inter[i - l1];
}

void mergesort (int l, int r) {
  int m = (l + r) >> 1;

  if (l >= r)
    return;

  mergesort(l, m);
  mergesort(m + 1, r);
  interclasare (l, m, m + 1, r);
}

int main(int argc, char *argv[]) {
  freopen ("algsort.in", "r", stdin);
  freopen ("algsort.out", "w", stdout);

  scanf("%d\n", &n);

  int i;
  for (i = 0; i < n; ++i)
    scanf("%d ", &v[i]);

  mergesort (0, n - 1);
  for (i = 0; i < n; ++i)
    printf ("%d ", v[i]);
  
  return 0;
}