Pagini recente » Cod sursa (job #716267) | Cod sursa (job #2601492) | Cod sursa (job #714500) | Cod sursa (job #1417343) | Cod sursa (job #2749670)
#include<fstream>
using namespace std;
long long int s[16000];
int main(){
ifstream in("transport.in");
ofstream out("transport.out");
long long int n,k,m=0,t=1;
in>>n>>k;
while(t*2<=n){
t*=2;
}
s[0]=0;
for(long long int i=1;i<=n;i++){
long long int r;
in>>r;
if(m<r){
m=r;
}
s[i]=s[i-1]+r;
}
long long int stanga=m,dreapta=s[n],capacitate;
while(stanga<dreapta){
long long int mijloc=(stanga+dreapta)/2,numar=0,x;
x=mijloc;
while(x<s[n]){
long long int p=0;
for(long long int i=t;i>=1;i/=2){
if(s[p+i]<=x && p+i<=n){
p+=i;
}
}
numar++;
x=s[p]+mijloc;
}
numar++;
if(numar<=k){
capacitate=mijloc;
dreapta=mijloc;
}else{
stanga=mijloc;
}
if(mijloc==stanga){
break;
}
}
out<<capacitate;
}