Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.22 KB | None | 0 0
  1. def merge(arr, l, m, r):
  2.     n1 = m - l + 1
  3.     n2 = r - m
  4.     L = []
  5.     R = []
  6.     for i in range(n1):
  7.         L.append(arr[l + i])
  8.     for j in range(n2):
  9.         R.append(arr[m + 1 + j])
  10.     i = 0
  11.     j = 0
  12.     k = l
  13.     while i < n1 and j < n2:
  14.         if L[i][1] < R[j][1] or (L[i][1] == R[j][1] and L[i][0] < R[j][0]):
  15.             arr[k] = L[i]
  16.             i += 1
  17.         else:
  18.             arr[k] = R[j]
  19.             j += 1
  20.         k += 1
  21.     while i < n1:
  22.         arr[k] = L[i]
  23.         i += 1
  24.         k += 1
  25.     while j < n2:
  26.         arr[k] = R[j]
  27.         j += 1
  28.         k += 1
  29.  
  30.  
  31. def sort(arr, l, r):
  32.     if l < r:
  33.         m = (l + r) // 2
  34.         sort(arr, l, m)
  35.         sort(arr, m + 1, r)
  36.         merge(arr, l, m, r)
  37.  
  38.  
  39. n, x, k = list(map(int, input().split()))
  40. a = list(map(int, input().split()))
  41.  
  42. brr = []
  43. for el in a:
  44.     b = el % x
  45.     brr.append((el, b))
  46.  
  47. sort(brr, 0, len(brr) - 1)
  48.  
  49. lo = 0
  50. hi = pow(10, 18)
  51. while lo < hi:
  52.     mid = (lo + hi) // 2
  53.     col = 0
  54.     last = -1
  55.     for b in brr:
  56.         if b[1] != last and mid >= b[0]:
  57.             col += (mid - b[0]) // x + 1
  58.             last = b[1]
  59.     if k <= col:
  60.         hi = mid
  61.     else:
  62.         lo = mid + 1
  63.  
  64. print(lo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement