Cod sursa(job #2379178)

Utilizator sansRotaru Razvan Andrei sans Data 13 martie 2019 01:21:34
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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));
}