Cod sursa(job #1023140)

Utilizator ELHoriaHoria Cretescu ELHoria Data 6 noiembrie 2013 15:21:10
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;
 
ifstream cin("grupuri.in");
ofstream cout("grupuri.out");

const int nmax = int(1e5) + 2;
int N, K;
long long a[nmax];

int main()
{
	cin>>K>>N;
	for(int i = 1;i <= N;i++) {
		cin>>a[i];
		a[i] += a[i - 1];
	}

	auto canGroup = [] (const int &G) {
		if(a[1] > G) {
			return 1ll*N*G >= 1ll*K*G;
		}
		int pos = 1;
		for(int step = 1<<20;step > 0;step >>= 1) {
			if(pos + step <= N && a[pos + step] - a[pos + step - 1] <= G) {
				pos += step;
			}
		}
		return a[pos] + 1ll*G*(N - pos) >= 1ll*K*G;
	};

	int ans = 0;
	for(int step = 1<<30;step > 0;step >>= 1) {
		if(canGroup(ans + step)) {
			ans += step;
		}
	}
	cout<<ans;
    return 0;
}