Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. from collections import deque
  2.  
  3. #middle is included in the left array!
  4. #high is included in the right array!
  5.  
  6. def merge(arr, low, middle, high):
  7. #dbg_curr = arr[low:high+1]
  8. #print('before: ', dbg_curr)
  9. qleft = deque(arr[low:middle+1])
  10. qright = deque(arr[middle+1:high+1])
  11.  
  12. left_higher = 0
  13. idx = low
  14. while qleft and qright:
  15. if qleft[0] <= qright[0]:
  16. arr[idx] = qleft.popleft()
  17. else:
  18. arr[idx] = qright.popleft()
  19. left_higher += len(qleft)
  20.  
  21. idx += 1
  22.  
  23. while qleft:
  24. arr[idx] = qleft.popleft()
  25. idx += 1
  26.  
  27. while qright:
  28. arr[idx] = qright.popleft()
  29. idx += 1
  30.  
  31. #dbg_curr = arr[low:high+1]
  32. #print('after: ', dbg_curr)
  33. #print('left_higher: ', left_higher)
  34.  
  35. return left_higher
  36.  
  37. def mergesort_impl(arr, low, high):
  38. left_higher = 0
  39. if low < high:
  40. middle = (low + high)//2
  41. left_higher += mergesort_impl(arr, low, middle)
  42. left_higher += mergesort_impl(arr, middle+1, high)
  43. left_higher += merge(arr, low, middle, high)
  44. return left_higher
  45.  
  46.  
  47. def mergesort(arr):
  48. return mergesort_impl(arr, 0, len(arr)-1)
  49.  
  50. def solve(rows):
  51. exrs = 0
  52. for row in rows:
  53. exrs += mergesort(row)
  54. return exrs
  55.  
  56.  
  57.  
  58. import random
  59.  
  60. for i in range(100):
  61. print(i)
  62. size = random.randint(9000, 10000)
  63. arr = list(range(size))
  64. random.shuffle(arr)
  65. arr_sorted = sorted(arr)
  66. mergesort(arr)
  67. assert(arr_sorted == arr)
  68.  
  69. """
  70.  
  71. soldiers_in_row, n_rows = tuple(map(int, input().split()))
  72. rows = []
  73. for _ in range(n_rows):
  74. rows.append(list(map(int, input().split())))
  75. print(solve(rows))
  76. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement