Pagini recente » Cod sursa (job #911420) | Cod sursa (job #523992) | Cod sursa (job #3263518) | Cod sursa (job #2934989) | Cod sursa (job #521413)
Cod sursa(job #521413)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n,k,i,maxim,st,dr,mij,sol;
long long int s;
int f(int x,vector<int>v){
int y=0;
long long int sx=0;
for(i=1;i<=n;++i){
if(sx+v[i]<x){
sx+=v[i];
}
else{
if(sx+v[i]==x){
sx=0;
++y;
}
if(sx+v[i]>x){
sx=v[i];
++y;
}
if(i==n && sx<x){
++y;break;
}
}
}
return y;
}
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&k);
vector<int>v(n+2);
for(i=1;i<=n;++i){
scanf("%d",&v[i]);
if(maxim<v[i]){
maxim=v[i];
}
s+=v[i];
}
st=maxim;
dr=s;
if(f(st,v)<=k){
printf("%d",st);
}
else{
while(st<dr){
mij=(st+dr)/2;
if(f(mij,v)<=k){
sol=mij;
}
dr=mij;
}
printf("%d",sol);
}
return 0;
}