Cod sursa(job #345519)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 3 septembrie 2009 14:50:05
Problema Grupuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define Nmax 100005
#define ll long

ll n,k,i;
ll a[Nmax],p[Nmax];
ll s;

ll merge( ll x){
	ll i,j=1,ok,y;
   for(i=1;i<=n;++i) if(a[i]>=x) p[i]=x; else p[i]=a[i];
   ok=1;
   for(i=1;i<=k && ok;i++){
   	y=x;
   	while( y>0 && j<=n ){
      	if(p[j] > y) p[j]-=y,y=0;
         else y-=p[j],p[j]=0,j++;
      }
      if(y>0) ok=0;
   }
   return ok;
}

ll caut_bin(ll l, ll r){
	ll m,rez=0;
   while(l<=r){
   	m=l+(r-l)/2;
      if( merge(m) ){
      	rez=m;
         l=m+1;
      }
      else r=m-1;
   }
   return rez;
}

int main(){
	freopen("grupuri.in","r",stdin);
   freopen("grupuri.out","w",stdout);
   scanf("%lld%lld",&k,&n);
	for(i=1;i<=n;++i) scanf("%lld",&a[i]), s+=a[i];

   printf("%lld\n",caut_bin(0,(ll) s/k));
   fclose(stdin); fclose(stdout);
   return 0;
}