Cod sursa(job #295845)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 3 aprilie 2009 18:39:53
Problema Grupuri Scor 74
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>

#define FIN "grupuri.in"
#define FOUT "grupuri.out"

#define N 100010

int n, k, a[N], s[N], c;

void read()
{
    int i;
    freopen(FIN, "r", stdin);

    scanf("%d%d", &k, &n);

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

int calc(int m)
{
    int x, i = 1, ok = 1;

    while (i < n && ok)
        if (a[i] >= m)
            ok = 0;
        else
            ++i;

    x = s[i - 1] / m + (n >= i ? (n - i + 1) : 0);

    if (x < k)
        return 1;

    if (x == k)
        return 0;

    return -1;
}

void solve()
{
    int p = 1, u = s[n] / k, m, x;

    while (p < u)
    {
        m = (p + u) >> 1;

        x = calc(m);

        if (x < 1)
        {
            p = m + 1;
            //if (x == 0)
                c = m;
        }
        else
            u = m;
    }
    if (calc(p) < 1 && p > c)
        c = p;
}

void write()
{
    freopen(FOUT, "w", stdout);

    printf("%d\n", c);
}

int main()
{
    read();

    solve();

    write();
}