Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6. ifstream fin("meh.txt");
  7.  
  8. int mergeIt(vector<int> mV, int start, int middle, int end)
  9. {
  10. int count = 0;
  11. int b[end - start +1];
  12. int i = start, j = middle + 1, poz=0;
  13.  
  14. while ((i <= middle)&&( j <= end))
  15. {
  16. if (i < j && mV[i] > 2*mV[j])
  17. {
  18. count = count + j - middle;
  19. b[poz] = mV[i];
  20. i++;
  21. }
  22. else
  23. {
  24. b[poz] = mV[j];
  25. j++;
  26. }
  27. poz++;
  28. }
  29.  
  30. while(i <= middle)
  31. {
  32. if (j <= end && (i < j && mV[i] > 2*mV[j]))
  33. count = count + (j - middle);
  34.  
  35. b[poz] = mV[i];
  36. poz++;
  37. i++;
  38. }
  39.  
  40. while(j <= end)
  41. {
  42. b[poz] = mV[j];
  43. poz++;
  44. j++;
  45. }
  46.  
  47. for (i = start; i <= end; i++)
  48. mV[i] = b[i - start];
  49.  
  50. return count;
  51. }
  52.  
  53. int mergeSort(vector<int> mV, int start, int end)
  54. {
  55. int result1, result2, result3;
  56.  
  57. if (start == end)
  58. {
  59. return 0;
  60. }
  61. else
  62. {
  63. int middle = (start + end) / 2;
  64.  
  65. result1 = mergeSort(mV, start, middle);
  66. result2 = mergeSort(mV, middle + 1, end);
  67. result3 = mergeIt(mV, start, middle, end);
  68. }
  69.  
  70. return result1+result2+result3;
  71. }
  72.  
  73. int main()
  74. {
  75. vector<int> myVector;
  76. int n, x;
  77.  
  78. fin >> n;
  79.  
  80. while (fin >> x)
  81. myVector.push_back(x);
  82.  
  83. cout << "Nr. de inversiuni semnificative este " << mergeSort(myVector, 0, n - 1);
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement