Pagini recente » Cod sursa (job #1661717) | Cod sursa (job #674563) | Cod sursa (job #2126580) | Cod sursa (job #1926336) | Cod sursa (job #345519)
Cod sursa(job #345519)
#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;
}