Pagini recente » Cod sursa (job #1173630) | Cod sursa (job #3458) | Cod sursa (job #1832045) | Cod sursa (job #3514) | Cod sursa (job #1180858)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int s[16016];
int bs(int st, int dr, int x)
{
int ans = 0, stc = st;
while(st <= dr) {
int mij = (st + dr)/2;
if(s[mij] - s[stc - 1]<= x) {
ans = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return ans;
}
bool nrt(int c, int n, int k)
{
int st = 1, ans = 0;
while(st <= n) {
st = bs(st, n, c) + 1;
++ans;
if(ans > k) return 0;
}
return 1;
}
int bs2(int st, int dr, int n, int k)
{
int ans = 0;
while(st <= dr) {
int mij = (st + dr)/2;
if(nrt(mij, n, k)) {
ans = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return ans;
}
int main()
{
int n, k;
in >> n >> k;
for(int i = 1; i <= n; ++i) {
in >> s[i];
s[i] = s[i - 1] + s[i];
}
out << bs2(s[1], s[n], n, k);
return 0;
}