Pagini recente » Cod sursa (job #2510695) | Cod sursa (job #23256) | Cod sursa (job #2534608) | Cod sursa (job #2621797) | Cod sursa (job #3268777)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMAX = 16000;
int v[NMAX + 5];
int n, k, sum;
int ok(int c) {
int cnt = 0;
int sumi = 0;
for (int i = 1; i <= n; ++i) {
sumi += v[i];
if (sumi > c) {
sumi = v[i];
cnt++;
}
if (v[i] > c) {
return k + 1;
}
}
if (sumi != 0) {
cnt++;
}
return cnt;
}
int bs_left(int st, int dr) {
int med, last = -1, tr;
while (st <= dr) {
med = (st + dr) / 2;
tr = ok(med);
if (tr <= k) {
last = med;
dr = med - 1;
}
else {
st = med + 1;
}
}
return last;
}
int main()
{
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
sum += v[i];
}
fout << bs_left(1, sum);
return 0;
}