Pagini recente » Cod sursa (job #2315170) | Cod sursa (job #1827566) | Cod sursa (job #1102867) | Cod sursa (job #1254913) | Cod sursa (job #1452151)
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#define MAX(x, y) ((x) > (y) ? (x) : (y))
int N, K, max, _K, X[16001], LOG;
int check(int val){
int step, k = 0, sum = 0, _k = 0;
while (k != N && _k < K){
for (step = LOG; step; step >>= 1)
if (k + step > N) continue;
else if (X[k + step] - sum <= val) k += step;
sum = X[k], ++_k;
}
if (k < N) return -1;
if (_k < K) return 1;
return 0;
}
int main(void)
{
int l, r, m;
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &N, &K);
for (int i = 1; i <= N; ++i)
scanf("%d", &X[i]),
max = MAX(max, X[i]),
X[i] += X[i - 1];
for (LOG = 1; LOG < +N; LOG <<= 1);
l = max, r = X[N];
do{
m = (l + r) >> 1;
_K = check(m);
if (_K < 0) l = m;
else r = m + 1;
} while (_K);
while (!check(--m));
printf("%d", ++m);
return 0;
}