5 2 7 2 5 10 8
18
import sys
p=sys.stdin.read().strip().split()
if len(p)<2: sys.exit(0)
it=iter(p)
n=int(next(it)); m=int(next(it))
a=[int(next(it)) for _ in range(n)]
lo=max(a)
hi=sum(a)
def can(limit):
parts=1
s=0
for v in a:
if s+v<=limit:
s+=v
else:
parts+=1
s=v
if parts>m:
return False
return True
while lo<hi:
mid=(lo+hi)//2
if can(mid):
hi=mid
else:
lo=mid+1
sys.stdout.write(str(lo))
import sys
p=sys.stdin.read().strip().split()
if len(p)<2: sys.exit(0)
it=iter(p)
n=int(next(it)); m=int(next(it))
a=[int(next(it)) for _ in range(n)]
lo=max(a)
hi=sum(a)
def can(limit):
parts=1
s=0
for v in a:
if s+v<=limit:
s+=v
else:
parts+=1
s=v
if parts>m:
return False
return True
while lo<hi:
mid=(lo+hi)//2
if can(mid):
hi=mid
else:
lo=mid+1
sys.stdout.write(str(lo))