Pagini recente » Cod sursa (job #1972532) | Cod sursa (job #2954086) | Cod sursa (job #1155811) | Cod sursa (job #2508755) | Cod sursa (job #896992)
Cod sursa(job #896992)
#include <cstdio>
#define NMax 16001
using namespace std;
long maxx,minn,pw,j,k,n,v[NMax],x,in,maxxe,prev;
int bsearch(long in,long fn,long v[],long val) {
long mid;
if(v[fn]<val)
return fn;
while(in<=fn) {
mid=(fn-in)/2+in;
if(v[mid]<=val&&val<v[mid+1])
return mid;
else
if(val<v[mid])
fn=mid-1;
else
in=mid+1;
}
return 1;
}
int main()
{
freopen("transport.in","rt",stdin);
freopen("transport.out","wt",stdout);
scanf("%ld %ld",&n,&k);
for(long i=1;i<=n;i++) {
scanf("%ld",&x);
v[i]=v[i-1]+x;
if(x>maxxe)
maxxe=x;
}
pw=v[n]/k>maxxe ? v[n]/k : maxxe;
j=in=1;
while(j<k) {
minn=bsearch(in,n,v,pw+v[prev]);
in = pw+v[prev]-v[minn]>v[minn+1]-pw-v[prev] ? minn+1 : minn;
if(v[in]-v[prev]>maxx)
maxx=v[in]-v[prev];
prev=in;
j++;
}
if(v[n]-v[prev]>maxx)
maxx=v[n]-v[minn];
printf("%ld",maxx);
return 0;
}