Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SENTINEL = 2000000000
- def merge(A,n,left,mid,right):
- cnt = 0
- n1 = mid - left
- n2 = right - mid
- L = []
- R = []
- for i in range(n1):
- L.append(A[left+i])
- for j in range(n2):
- R.append(A[mid+j])
- L.append(SENTINEL)
- R.append(SENTINEL)
- i = j = 0
- for k in range(left,right):
- if L[i] <= R[j]:
- A[k] = L[i]
- i += 1
- else:
- A[k] = R[j]
- j += 1
- cnt += n1 -i
- return cnt
- def mergeSort(A,n,left,right):
- if left + 1 < right:
- mid = (left + right) // 2
- v1 = mergeSort(A,n,left,mid)
- v2 = mergeSort(A,n,mid,right)
- v3 = merge(A,n,left,mid,right)
- return v1 + v2 + v3
- else:
- return 0
- n = int(input())
- a = list(map(int,input().split()))
- print(mergeSort(a,n,0,n))
- #example input
- #5
- #3 5 2 1 4
- #
- #output
- #6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement