Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. void Merge(long* arr, int begin, int end, long long* p_a) {
  5.  
  6.     int i = begin;
  7.     int mid = begin + (end - begin) / 2;
  8.     int j = mid + 1;
  9.     int k = 0;
  10.  
  11.     long d[end - begin];
  12.  
  13.  
  14.     while (i <= mid && j <= end) {
  15.         if (arr[i] <= arr[j]) {
  16.             d[k] = arr[i];
  17.             i++;
  18.         }
  19.         else {
  20.             d[k] = arr[j];
  21.             j++; *p_a += mid + 1 - i;
  22.         }
  23.         k++;
  24.     }
  25.  
  26.     while (i <= mid) {
  27.         d[k] = arr[i];
  28.         i++; k++;
  29.     }
  30.  
  31.     while (j <= end) {
  32.         d[k] = arr[j];
  33.         j++; k++;
  34.     }
  35.  
  36.     for (i = 0; i < k; ++i) {
  37.         arr[begin + i] = d[i];
  38.     }
  39.  
  40. }
  41.  
  42. void Merge_Sort(long* arr, int left, int right, long long* p_a) {
  43.  
  44.     if (left < right) {
  45.         if (right - left == 1) {
  46.             if (arr[left] > arr[right]) {
  47.                 std::swap(arr[left], arr[right]);
  48.                 *p_a += 1;
  49.             }
  50.         }
  51.         else {
  52.             Merge_Sort(arr, left, left + (right - left) / 2, p_a);
  53.             Merge_Sort(arr, left + (right - left) / 2 + 1, right, p_a);
  54.             Merge(arr, left, right, p_a);
  55.         }
  56.     }
  57. }
  58.  
  59. int main() {
  60.     int n;
  61.     long long a;
  62.     long long* p_a = &a;
  63.  
  64.     std::ifstream in("inversions.in");
  65.     in >> n;
  66.  
  67.     long arr[n];
  68.  
  69.     for (int i = 0; i < n; ++i) {
  70.         in >> arr[i];
  71.     }
  72.  
  73.     Merge_Sort(arr, 0, n - 1, p_a);
  74.  
  75.     std::ofstream out("inversions.out");
  76.     out << *p_a;
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement