Cod sursa(job #468118)

Utilizator darrenRares Buhai darren Data 2 iulie 2010 12:50:15
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<fstream>
using namespace std;

bool test(int v);

int n, k, cant[100001];
long long sum;
int main()
{
	ifstream fin("grupuri.in");
	ofstream fout("grupuri.out");
	fin >> k >> n;
	for (int i = 1; i <= n; ++i)
	{
		fin >> cant[i];
		sum += cant[i];
	}
	
	sum /= k;
	++sum;
	
	int step, i;
	for (step = 1; step << 1 <= sum; step <<= 1);
	for (i = 0; step; step >>= 1)
		if (i + step <= sum && test(i + step))
			i += step;
	fout << i;
}

bool test(int v)
{
	int i; long long s = 0;
	for (i = 1; i <= n; ++i)
		if (cant[i] < v) s += cant[i];
		else             break;
	s += v * (n - i + 1);
	return s >= (long long)v * k;
}