Cod sursa(job #428498)

Utilizator Negrimongwriter Negrimon Data 29 martie 2010 12:15:17
Problema Grupuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#define Nmax 100000

using namespace std;

long long s,n,k,a[Nmax],b[Nmax],ss;

void citire();
long long cb(long long in,long long sf);
long long verif(long long X);
int caut_b(int in,int sf,int x);

int main()
{
	freopen("grupuri.in","r",stdin);
	freopen("grupuri.out","w",stdout);
	citire();
	if (verif(s/k)) printf("%ld",s/k);
	else 
	{
		ss=cb(1,s/k);
		printf("%ld",ss);
	}
	return 0;
}

int caut_b(int in,int sf,int x)
{
	int mij=in+(sf-in)/2;
	if (a[mij]<x)
		return caut_b(mij,sf,x);
	return caut_b(in,mij,x);
}

long long verif(long long X)
{
	long long z=0,i=n,sa=k*X;
	z=caut_b(1,n,X);
	if (z<=n-k) return 1;
	if (b[n-z]>=sa-z*X) return 1;
	return 0;
}
	

void citire()
{
	long long i;
	scanf("%ld%ld",&k,&n);
	for (i=1;i<=n;++i)
	{
		scanf("%ld",&a[i]);
		s+=a[i];
		b[i]=s;
	}
}

long long cb(long long in,long long sf)
{
	long long mij,ok1;//in=1,sf=s/k;
	mij=in+(sf-in)/2;
	ok1=verif(mij);
	if (ok1) 
		return cb(mij,sf);
	return cb(in,mij);
	return in;
}