boolcheck(int x) { int l = 1, r = 1, cnt = 0; while (r <= N) { if (sum(r, l) <= x) ++r; else { ++cnt; if (l == r) ++r; l = r; } } return ++cnt <= M; }
intmain() { cin >> N >> M; int mx = INT_MIN; for (int i = 1, in; i <= N; ++i) { cin >> in; pre[i] = in + pre[i - 1]; mx = max(mx, in); } int l = mx, r = pre[N]; while (l <= r) { int mid = l + (r - l) / 2; if (check(mid)) r = mid - 1; else l = mid + 1; } cout << l; return0; }