Cod sursa(job #378928)

Utilizator DraStiKDragos Oprica DraStiK Data 29 decembrie 2009 23:34:36
Problema Grupuri Scor 76
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <algorithm>
using namespace std;

#define MAX 100000000000ll
#define ll long long
#define DIM 100005

ll a[DIM];
int n,k;

void read ()
{
    int i;

    scanf ("%d%d",&k,&n);
    for (i=1; i<=n; ++i)
        scanf ("%lld",&a[i]);
}

int check (ll val)
{
    int i,nrl;
    ll nrc;

    for (nrl=0, nrc=1, i=1; i<=n; ++i)
        if (a[i]>=val)
            ++nrl;
        else
        {
            nrc+=a[i];
            if (nrc>=val)
            {
                nrc-=val;
                ++nrl;
            }
        }
    if (nrl>=k)
        return 1;
    return 0;
}

void solve ()
{
    ll st,dr,mij,sol;

    for (st=sol=1, dr=MAX; st<=dr; )
    {
        mij=(st+dr)/2;
        if (check (mij))
        {
            sol=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    printf ("%lld",sol);
}

int main ()
{
    freopen ("grupuri.in","r",stdin);
    freopen ("grupuri.out","w",stdout);

    read ();
    solve ();

    return 0;
}