Pagini recente » Cod sursa (job #2811122) | Istoria paginii runda/oni2014_ziua_iii | Cod sursa (job #2463941) | Cod sursa (job #3211055) | Cod sursa (job #2379178)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 500000
long long v[NMAX+5], maxx, sum, n, sumepartiale[NMAX+5];
bool Check(long long maximum, int k){
long long trans = 1, sums = 0, last = 0;
for(int i = 1; i<=n; i++){
sums = sumepartiale[i]-sumepartiale[last];
if(sums>maximum){
last = --i;
trans++;
}
}
if(trans<=k) return true;
else return false;
}
long long BinarySearch(long long st, long long dr, int k){
long long m;
while(st<dr){
m = st+(dr-st)/2;
bool a = Check(m, k);
if(a) dr = m;
else st = m + 1;
}
return st;
}
int main(){
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int k;
scanf("%llu%d", &n, &k);
for(int i = 1; i<=n; i++){
scanf("%llu", &v[i]);
maxx = max(maxx, v[i]);
sum+=v[i];
sumepartiale[i] = sumepartiale[i-1]+v[i];
}
printf("%lld", BinarySearch(maxx, sum, k));
}