https://www.acmicpc.net/problem/16401

막대 과자 길이를 이분탐색으로 찾으면 된다.
그리고 막대 과자를 나눴을 때 조카 수보다 많이 나오거나 같을 때는 low = mid + 1(더 긴 막대과자를 찾도록), 적게 나오면 high = mid - 1(막대 과자를 줄여야하므로)
import sys
input = sys.stdin.readline
m, n = map(int, input().split()) # M명 조카, N개 과자
snack = list(map(int, input().split()))
low = 1
high = max(snack)
answer = 0
while low <= high:
mid = (low+high) // 2 # 막대 과자 최대 길이라고 생각
cnt = 0 # 막대과자 몇 개 나오는지
for num in snack:
cnt += num // mid
if cnt >= m: # 막대과자가 조카 수보다 많이 나오면
answer = mid
low = mid + 1
else:
high = mid - 1