Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8.  
  9. long _mergeSort(int arr[], int temp[], int left, int right);
  10. long merge(int arr[], int temp[], int left, int mid, int right);
  11.  
  12. long mergeSort(int arr[], long size)
  13. {
  14. int * array= new int [size];
  15. return _mergeSort(arr, array, 0, size - 1);
  16. delete[] array;
  17. }
  18.  
  19. long _mergeSort(int arr[], int temp[], int start, int end)
  20. {
  21. long numberOfInversions = 0;
  22. if (start < end) {
  23.  
  24. int mid = (end + start) / 2;
  25.  
  26.  
  27. numberOfInversions = _mergeSort(arr, temp, start, mid);
  28. numberOfInversions += _mergeSort(arr, temp, mid + 1, end);
  29.  
  30.  
  31. numberOfInversions += merge(arr, temp, start, mid + 1, end);
  32. }
  33. return numberOfInversions;
  34. }
  35.  
  36. long merge(int arr[], int temp[], int start, int mid, int end)
  37. {
  38.  
  39. long numberOfInversions = 0;
  40.  
  41. int left = start;
  42. int right = mid;
  43. int beginOfArray = start;
  44.  
  45. while ((left <= mid - 1) && (right <= end)) {
  46. if (arr[left] <= arr[right]) {
  47. temp[beginOfArray++] = arr[left++];
  48. }
  49. else {
  50. temp[beginOfArray++] = arr[right++];
  51.  
  52. numberOfInversions = numberOfInversions + (mid - left);
  53. }
  54. }
  55.  
  56.  
  57. while (left <= mid - 1)
  58. temp[beginOfArray++] = arr[left++];
  59.  
  60. while (right <= end)
  61. temp[beginOfArray++] = arr[right++];
  62.  
  63. for (left = start; left <= end; left++)
  64. arr[left] = temp[left];
  65.  
  66. return numberOfInversions;
  67. }
  68.  
  69. int main()
  70. {
  71. long numberOfBuildings = 0;
  72. cin >> numberOfBuildings;
  73. long y = 0;
  74.  
  75. int * buildingsHeight = new int[numberOfBuildings];
  76.  
  77. for (int i = 0; i < numberOfBuildings; i++) {
  78. cin >> buildingsHeight[i];
  79. }
  80. y= mergeSort(buildingsHeight, numberOfBuildings);
  81. cout<<y;
  82.  
  83. delete[] buildingsHeight;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement