Cod sursa(job #2654041)

Utilizator pctirziuTirziu Petre pctirziu Data 29 septembrie 2020 18:42:10
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
#define nmax 16005
int v[nmax],sum[nmax];
int main()
{
    int n,i,j,k;
    cin>>n>>k;
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
        sum[i]=sum[i-1]+v[i];
    }
    int st=1;
    int dr=nmax*nmax;
    int mid;
    int poz1;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        int poz=0,ok=0;
        for(i=1;i<=k;i++)
        {
            int st1=poz+1;
            int x=poz;
            int dr1=n;
            int med;
            while(st1<=dr1)
            {
                med=(st1+dr1)/2;
                if(sum[med]-sum[x]<=mid)
                {
                    poz=med;
                    st1=med+1;
                }
                else
                    dr1=med-1;
            }
            if(poz>=n)
            {
                   ok=1;
                   break;
            }
        }
        if(ok==0)
            st=mid+1;
        else
        {
            poz1=mid;
            dr=mid-1;
        }
    }
    cout<<poz1;
    return 0;
}