# 랜선 자르기 import sys input = sys.stdin.readline def binary_search(l, r, lan_lst, target): result = 0 while l <= r: count = 0 mid = (l+r)//2 for lan in lan_lst: count += (lan // mid) if count >= target: l = mid+1 result = mid else: r = mid-1 return result def solution(): k, n = map(int, input().rstrip().split()) max_len = 0 lan_lst = [0] * k for i in range(k): lan_lst[i] = int(input().rstrip()) max_len = max(max_len, lan_lst[i]) result = binary_search(l=1, r=max_len+1, lan_lst=lan_lst, target=n) print(result) return solution() """ 걸린 시간: 1시간 시간 복잡도: 1부터 가장 큰 랜선 길이까지의 범위에서 이분탐색을 진행하므로 O(log(2^31-1))이고, 이분탐색을 할 때마다 k개의 랜선을 잘라보기 때문에 O(klogn)이다. 해설: 최대 길이를 찾는 것이기 때문에 주어진 랜선 중 가장 긴 길이부터 아래로 내려가면서 n개가 나오는 첫 지점을 찾으면 된다. 근데 이렇게 하면 랜선의 길이가 최대 2^31-1이므로 너무 오래 걸린다. 마침 수직선이기 때문에 이분탐색을 하면 되겠다는 생각을 했고, 이렇게 최적화 문제를 결정문제로 바꿔서 푸는 것을 파라메트릭 서치라고 한다. 이분 탐색 구현은 count가 n보다 크면 일단 답 후보로 넣어놓고, l을 mid+1로 옮겼고, 반대의 상황일 때는 답 후보로 넣지 않고, r을 mid-1로 했다. """