Pagini recente » Cod sursa (job #2154825) | Cod sursa (job #1285675) | Cod sursa (job #3030252) | Cod sursa (job #226169) | Cod sursa (job #2552528)
#include <cstdio>
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int N = 16000;
const int V = 16000;
int sum[N + 1];
bool valid(int h, int k, int n){
int search = 0;
int li = 0, ls, mij;
for(int t=0; t<k; t++){
search += h;
li++, ls = n;
while(li <= ls){
mij = (li + ls)/2;
if(sum[mij] > search)
ls = mij - 1;
else
li = mij + 1;
}
li--;
search = sum[li];
}
if(li == n)
return true;
return false;
}
int cauta(int li, int ls, int k, int n){
int mij;
bool fit;
while(li <= ls){
mij = (li + ls)/2;
fit = valid(mij, k, n);
if(fit == true)
ls = mij - 1;
else
li = mij + 1;
}
return li;
}
int main()
{
int n, k, i, li, ans;
fin >> n >> k;
li = V;
for(i=1; i<=n; i++){
fin >> sum[i];
li = min(li, sum[i]);
sum[i] += sum[i-1];
}
ans = cauta(li, sum[n], k, n);
fout << ans << endl;
return 0;
}