Cod sursa(job #470492)

Utilizator hendrikHendrik Lai hendrik Data 14 iulie 2010 04:50:00
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

void open(){
	freopen("grupuri.in","r",stdin);
	freopen("grupuri.out","w",stdout);
}
#define REP(i,n) for (int i=0;i<(n);i++)
#define N 100010
typedef long long ll;
int k,n,x[N];
ll sum;

void input(){
	scanf("%d%d",&k,&n);
	REP(i,n){
		scanf("%d",&x[i]);
		sum+=(ll)x[i];
	}
}

bool ok(int a){
	ll p=(ll)a*k;
	REP(i,n){
		if (x[i]<a){
			p-=(ll)x[i];
		}
		else p-=(ll)a;
		if (p<=0) return 1;
	}
	return 0;
}

void solve(){
	int lo,hi,mid,ans;
	lo=0;hi=(int)(sum/(ll)k);
	while (1){
		mid=(lo+hi)>>1;
		if (ok(mid)){
			ans=mid;
			lo=mid+1;
		}
		else hi=mid-1;
		if (lo>hi) break;
	}
	printf("%d\n",ans);
}

int main(){
	open();
	input();
	solve();
	//system("pause");
	return 0;
}