传送门
#include<cstdio>
#define N 110000
long long n,m,sum=0,ans,max=0;
long long a[N];
void find(long long l,long long r)
{
if (l>r) return;
long long mid=(l+r)/2,s=0,k=0;
for (int i=1;i<=n;i++)
{
s+=a[i];
if (s>mid) k++,s=a[i];
}
if (s) k++;
if (k>m) find(mid+1,r);
else ans=mid,find(l,mid-1);
}
int main()
{
scanf("%lld%lld",&n,&m);
/*
这里又被坑了一下午
前面n,m定义的long long,读入的时候“%d”整成这玩意。
以后注意!以后注意!以后注意!
*/
for (int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
if (a[i]>max) max=a[i];
sum+=a[i];
}
find(max,sum);
printf("%lld",ans);
return 0;
}