Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def merge(arr, l, m, r):
- n1 = m - l + 1
- n2 = r - m
- L = []
- R = []
- for i in range(n1):
- L.append(arr[l + i])
- for j in range(n2):
- R.append(arr[m + 1 + j])
- i = 0
- j = 0
- k = l
- while i < n1 and j < n2:
- if L[i][1] < R[j][1] or (L[i][1] == R[j][1] and L[i][0] < R[j][0]):
- arr[k] = L[i]
- i += 1
- else:
- arr[k] = R[j]
- j += 1
- k += 1
- while i < n1:
- arr[k] = L[i]
- i += 1
- k += 1
- while j < n2:
- arr[k] = R[j]
- j += 1
- k += 1
- def sort(arr, l, r):
- if l < r:
- m = (l + r) // 2
- sort(arr, l, m)
- sort(arr, m + 1, r)
- merge(arr, l, m, r)
- n, x, k = list(map(int, input().split()))
- a = list(map(int, input().split()))
- brr = []
- for el in a:
- b = el % x
- brr.append((el, b))
- sort(brr, 0, len(brr) - 1)
- lo = 0
- hi = pow(10, 18)
- while lo < hi:
- mid = (lo + hi) // 2
- col = 0
- last = -1
- for b in brr:
- if b[1] != last and mid >= b[0]:
- col += (mid - b[0]) // x + 1
- last = b[1]
- if k <= col:
- hi = mid
- else:
- lo = mid + 1
- print(lo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement