Advertisement
Guest User

Untitled

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