Cod sursa(job #392567)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 7 februarie 2010 19:14:59
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>
#define ll long long

int a[100010], k, n;
ll s[100010];

int verif (ll x)
{
	int l=1, r=n, m, p=0;
	while (l<=r)
	{
		m=(l+r)/2;
		if (a[m]>=x) 
		{
			r=m-1;
			p=m;
		} else
		if (a[m]<x) l=m+1; 
	}
	int ck=k-(n-p+1);
	ck-=s[p-1]/x;
	if (ck<=0) return 1; else return 0;
}

ll search(ll l, ll r)
{
	ll m, s=0;
	while (l<=r)
	{
		m=(l+r)/2;
		if (verif(m))
		{
			s=m;
			l=m+1;
		} else r=m-1;
	}
	return s;
}

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