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