Cod sursa(job #75175)

Utilizator floringh06Florin Ghesu floringh06 Data 30 iulie 2007 22:33:20
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream> 
#include <cstdio>

using namespace std;

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

int N,K,BEST;
long long S; 
int A[MAX_N];

    inline int Min (int a, int b) {if (a<b) return a; else return b; };

    int check (long long X)
    {
        int i;
        long long vl=0;
        for (i=1; i<=N; ++i)
         vl+=(long long)Min(A[i],X);
        if (vl>=(long long)X*K) 
        {
         if (X>BEST)  BEST=X; 
         return 1;
        }
        return 0;  
    }
                                
                 

    void Solve (void)
    {
       long long li,lf,m;
       li=1; lf=S/K;
       while (li<=lf)
        {
          m=(li+lf)>>1;
          if (check(m)) li=m+1;
           else lf=m-1;
        }  
    }
 
    int main ()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        scanf("%d %d", &K, &N);
        for (int i=1; i<=N; ++i) {
            scanf("%d",A+i);
            S+=(long long)A[i]; }
        
        Solve();
        
        printf("%d",BEST);
        
        return 0;
    }