Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. SENTINEL = 2000000000
  2.  
  3. def merge(A,n,left,mid,right):
  4. cnt = 0
  5. n1 = mid - left
  6. n2 = right - mid
  7. L = []
  8. R = []
  9. for i in range(n1):
  10. L.append(A[left+i])
  11. for j in range(n2):
  12. R.append(A[mid+j])
  13. L.append(SENTINEL)
  14. R.append(SENTINEL)
  15. i = j = 0
  16. for k in range(left,right):
  17. if L[i] <= R[j]:
  18. A[k] = L[i]
  19. i += 1
  20. else:
  21. A[k] = R[j]
  22. j += 1
  23. cnt += n1 -i
  24.  
  25. return cnt
  26.  
  27. def mergeSort(A,n,left,right):
  28. if left + 1 < right:
  29. mid = (left + right) // 2
  30. v1 = mergeSort(A,n,left,mid)
  31. v2 = mergeSort(A,n,mid,right)
  32. v3 = merge(A,n,left,mid,right)
  33. return v1 + v2 + v3
  34. else:
  35. return 0
  36.  
  37. n = int(input())
  38. a = list(map(int,input().split()))
  39. print(mergeSort(a,n,0,n))
  40.  
  41. #example input
  42. #5
  43. #3 5 2 1 4
  44. #
  45. #output
  46. #6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement