Cod sursa(job #1322767)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 20 ianuarie 2015 13:20:31
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#define min(a,b) a > b ? b : a
#define MaxN 100013
#define lli long long int
using namespace std;

FILE *fin = freopen("grupuri.in","r",stdin);
FILE *fout = freopen("grupuri.out","w",stdout);

lli n, k, nr;
lli A[MaxN];


void Read()
{
    scanf("%lld%lld", &k, &n);
    for(lli i = 1; i <= n ; ++i)
    {
        scanf("%lld", &A[i]);
        nr += A[i];
    }
}

inline bool Check(lli m)
{
    lli s = 0;
    for(lli i = 1; i <= n ; ++i)
        s += min( A[i], m );
    if( s >= m * k )
        return 1;
    return 0;
}

void Solve()
{
    lli left = 0, right = nr / k + 1, m, sol = -1;

    while( left <= right )
    {
        m = (left + right) >> 1;
        if( Check(m) )
        {
            if(sol < m)
                sol = m;
            left = m + 1;
        }
        else
            right = m - 1;
    }
    printf("%lld", sol);
}

int main()
{
    Read();
    Solve();
    return 0;
}