Pagini recente » Cod sursa (job #2377460) | Cod sursa (job #2906788) | Cod sursa (job #1879747) | Cod sursa (job #2167840) | Cod sursa (job #2332696)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
long long n,act,nr;
long long k,i;
long long v[17000];
int estee(int x){
// daca valoarea x ajunge pt k transporturi in vectorul v
long long st=1,dr=n,act=0,nr=0,mid;
while(act!=n){
nr++;
st=act+1;
dr=n;
/// 1 3 4 5 6 7
/// 0 0 0 0 0 1
/// x=6 mid x
long long xx=v[act]+x;
while(st<=dr){
mid=(st+dr)/2;
if(v[mid]<=xx)
st=mid+1;
else
dr=mid-1;
}
act=dr;
if(v[act]+x<v[act+1]&&act!=n)
return 0;
}
if(nr>k)
return 0;
return 1;
}
int main()
{
fin>>n>>k;
long long x;
for(i=1;i<=n;i++){
fin>>x;
v[i]=v[i-1]+x;
}
long long st=1;
long long dr=16000*16000,mid;
while(st<=dr){
mid=(dr-st)/2+st;
if(estee(mid)==1)
dr=mid-1;
else
st=mid+1;
}
fout<<st;
}