fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int> vec;
  5. int n;
  6.  
  7. int recur(int l, int r) {
  8. int ans = 0;
  9. if (l + 1 >= r) {
  10. return ans;
  11. }
  12. int mid = (l + r) / 2;
  13. ans += recur(l, mid);
  14. ans += recur(mid, r);
  15.  
  16. // Debugging output
  17. cout << l << " " << r << endl;
  18.  
  19. // Count inversions
  20. int i = l, j = mid;
  21. while (i < mid && j < r) {
  22. if (vec[i] <= vec[j]) {
  23. i++;
  24. } else {
  25. ans += mid - i;
  26. j++;
  27. }
  28. }
  29.  
  30. inplace_merge(vec.begin() + l, vec.begin() + mid, vec.begin() + r);
  31. return ans;
  32. }
  33.  
  34. int main() {
  35. cin >> n;
  36. vec.resize(n);
  37. for (int i = 0; i < n; i++) {
  38. cin >> vec[i];
  39. }
  40. cout << recur(0, n) << endl;
  41. }
  42.  
Success #stdin #stdout 0s 5280KB
stdin
10
1 5 6 9 8 7 10 2 4 3
stdout
0 2
3 5
2 5
0 5
5 7
8 10
7 10
5 10
0 10
22