#include<bits/stdc++.h>
using namespace std;
int n, m, a[100001];
long long sum, kxmin, kxmax;
void hx(long long kxmin, long long kxmax) {
if (kxmax - kxmin == 1) {
cout << kxmax << endl;
return;
}
int t = 0, ans = 0;
long long mid = (kxmin + kxmax)>>1;
for (int i = 1; i <= n; i++) {
if (t < mid) {
t += a[i];
if (t > mid) {
ans++;
t = a[i];
} else if (t == mid) {
ans++;
t = 0;
}
if (ans > m)break;
}
}
ans++;
if (ans > m) hx(mid, kxmax);
else hx(kxmin, mid);
return;
}
int main() {
cin >> n >> m >> a[1];
kxmin = a[1];
sum = a[1];
for (int i = 2; i <= n; i++) {
cin >> a[i];
sum += a[i];
if (a[i] > kxmin)kxmin = a[i];
}
kxmax = kxmin * (n - m + 1);
kxmin -= 1;
hx(kxmin, kxmax);
return 0;
}
农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。
约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。
约翰的目标是合理安排每个fajo月包含的天数,使得开销最多的fajo月的开销尽可能少。