Cod sursa(job #2749670)

Utilizator RazvanLazar2004Lazar Razvan Gabriel RazvanLazar2004 Data 7 mai 2021 18:19:02
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#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;
}