Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. //H
  2. #include <algorithm>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. long long int merge(vector<int> &main_vec, int l, int r) {
  10.   int m = (l + r) / 2;
  11.   int i = l;
  12.   int j = m + 1;
  13.   int k = 0;
  14.   vector<int> C(r - l + 1);
  15.   long long int count = 0;
  16.  
  17.   while ((i <= m) && (j <= r)) {
  18.     if (main_vec[i] <= main_vec[j]) {
  19.       C[k++] = main_vec[i++];
  20.     } else {
  21.       C[k++] = main_vec[j++];
  22.       count = count + m - i + 1;
  23.     }
  24.   }
  25.  
  26.   while (i <= m) C[k++] = main_vec[i++];
  27.  
  28.   while (j <= r) C[k++] = main_vec[j++];
  29.  
  30.   for (int d = 0; d < r - l + 1; d++) main_vec[d + l] = C[d];
  31.  
  32.   return count;
  33. }
  34.  
  35. long long int msort(vector<int> &main_vec, int l, int r) {
  36.   if (l >= r) return 0;
  37.   int m = (l + r) / 2;
  38.  
  39.   long long int count = msort(main_vec, l, m);
  40.   count += msort(main_vec, m + 1, r);
  41.   count += merge(main_vec, l, r);
  42.  
  43.   return count;
  44. }
  45.  
  46. int main() {
  47.   ifstream input("input.txt");
  48.   int n;
  49.   input >> n;
  50.   vector<int> a(n);
  51.   for (int i = 0; i < n; ++i) {
  52.     input >> a[i];
  53.   }
  54.  
  55.   long long int count = msort(a, 0, n - 1);
  56.   ofstream output("output.txt");
  57.   output << count;
  58.   return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement