Advertisement
Guest User

Untitled

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