Cod sursa(job #169295)

Utilizator razvi9Jurca Razvan razvi9 Data 1 aprilie 2008 16:13:12
Problema Grupuri Scor 48
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.57 kb
#include<cstdio>
long long a[100001],n,i,k,s,st,dr,mij,x;
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];}
	st=1;dr=s/k;
	while(dr-st>1)
	{
		mij=(st+dr)>>1;
		x=mij*k;
		for(i=1;i<=n && x>0;i++)
			if(a[i]>=mij) x-=mij;
			else x-=a[i];
		if(x<=0) st=mij;
		else dr=mij-1;
	}
	if(dr>st){
		x=mij*dr;
		for(i=1;i<=n && x>0;i++)
			if(a[i]>mij) x-=mij;
			else x-=a[i];
		if(x<=0) st=dr;}
	printf("%lld\n",st);
	fclose(stdout);
	return 0;
}