Advertisement
Okorosso

Untitled

Mar 25th, 2021
524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. unsigned long long main_merge(vector<int> &arr, vector<int> &temp, int left, int right);
  7.  
  8. unsigned long long merge(vector<int> &arr, vector<int> &temp, int left, int mid, int right);
  9.  
  10. unsigned long long merge_sort(vector<int> &arr, int array_size) {
  11.  
  12.     vector<int> temp(arr.size());
  13.     return main_merge(arr, temp, 0, array_size - 1);
  14. }
  15.  
  16. unsigned long long main_merge(vector<int> &arr, vector<int> &temp, int left, int right) {
  17.  
  18.     unsigned long long mid, inv_count = 0;
  19.  
  20.     if (right > left) {
  21.         mid = (right + left) / 2;
  22.         inv_count = main_merge(arr, temp, left, mid);
  23.         inv_count += main_merge(arr, temp, mid + 1, right);
  24.         inv_count += merge(arr, temp, left, mid + 1, right);
  25.     }
  26.  
  27.     return inv_count;
  28. }
  29.  
  30. unsigned long long merge(vector<int> &arr, vector<int> &temp, int left, int mid, int right) {
  31.     int i, j, k;
  32.     unsigned long long inv_count = 0;
  33.     i = left;
  34.     j = mid;
  35.     k = left;
  36.  
  37.     while ((i <= mid - 1) && (j <= right)) {
  38.  
  39.         if (arr[i] <= arr[j]) {
  40.             temp[k++] = arr[i++];
  41.         } else {
  42.             temp[k++] = arr[j++];
  43.             inv_count = inv_count + (mid - i);
  44.         }
  45.     }
  46.  
  47.     while (i <= mid - 1)
  48.         temp[k++] = arr[i++];
  49.  
  50.     while (j <= right)
  51.         temp[k++] = arr[j++];
  52.  
  53.     for (i = left; i <= right; i++)
  54.         arr[i] = temp[i];
  55.  
  56.     return inv_count;
  57. }
  58.  
  59. int main() {
  60.  
  61.     ifstream in("input.txt");
  62.     ofstream out("output.txt");
  63.  
  64.     int n;
  65.     in >> n;
  66.     vector<int> arr(n);
  67.  
  68.     for (int i = 0; i < n; i++) {
  69.         in >> arr[i];
  70.     }
  71.     out << merge_sort(arr, arr.size());
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement