Advertisement
pdaogu

SEQPAIR

Mar 5th, 2019
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #define maxn 1000000
  3.  
  4. int a[maxn];
  5. int temp[maxn];
  6. int n;
  7. int cnt = 0;
  8.  
  9. void merge (int l, int k, int r) {
  10.     int i = l, j = k+1, v = 0;
  11.     while (i <= k && j <= r) {
  12.         if (a[i] < a[j]) {
  13.             temp[v] = a[j];
  14.             cnt += (k-i+1);
  15.             ++j;
  16.         } else {
  17.             temp[v] = a[i];
  18.             ++i;
  19.         }
  20.         ++v;
  21.     }
  22.     while (i <= k) {
  23.         temp[v] = a[i];
  24.         ++i;
  25.         ++v;
  26.     }
  27.     while (j <= r) {
  28.         temp[v] = a[j];
  29.         ++j;
  30.         ++v;
  31.     }
  32.  
  33.     for (i = l; i <= r; ++i) {
  34.         a[i] = temp[i-l];
  35.     }
  36.     return;
  37. }
  38.  
  39. void MergeSort (int l, int r) {
  40.     if (l < r) {
  41.         int k = (l+r)/2;
  42.         MergeSort(l, k);
  43.         MergeSort(k+1, r);
  44.         merge(l, k, r);
  45.     }
  46. }
  47.  
  48. int main () {
  49.     scanf("%d", &n);
  50.     for (int i = 1; i <= n; ++i) {
  51.         scanf("%d", &a[i]);
  52.     }
  53.     MergeSort(1, n);
  54.     printf("%d\n", cnt);
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement