Cod sursa(job #2666181)

Utilizator RazvanLazar2004Lazar Razvan Gabriel RazvanLazar2004 Data 1 noiembrie 2020 09:21:21
Problema Transport Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
long long int v[16000];
using namespace std;
int main(){
    ifstream in("transport.in");
    ofstream out("transport.out");
    long long int n,k,x,m=0,st,dr,t=1;
    in>>n>>k;
    while(t*2<=n){
        t*=2;
    }
    v[0]=0;
    for(long long int i=1;i<=n;i++){
        in>>x;
        v[i]=v[i-1]+x;
        if(m<x){
            m=x;
        }
    }
    st=m;
    dr=v[n];
    while(st+1<dr){
        long long int mij=(st+dr)/2,l=0,a=0,r=0;
        while(a<v[n]){
            a+=mij;
            for(long long int i=t;i>0;i/=2){
                if((v[i+r]<=a) && (i+r<=n)){
                    r+=i;
                }
            }
            a=v[r];
            l++;
        }
        if(l>k){
            st=mij;
        }else{
            dr=mij;
        }
    }
    out<<(st+dr+1)/2;
}