Cod sursa(job #253041)

Utilizator albuaAlbu Alexandru albua Data 5 februarie 2009 13:10:58
Problema Progresii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#define DMax 100009

long a[DMax];
long n,m,i,in,st,mij;
long long l,k,val[DMax],suma,sum[DMax];

void citire();

int main()
{
	freopen("progresii.in","r",stdin);
	freopen("progresii.out","w",stdout);
	citire();
	for(i=1;i<=n;i++)
		{
			//cautarea binara
			in=1;	st=m;
			while(in<=st)
				{
					mij=in+(st-in)/2;
					if((1+(l-a[i])/mij) <=(suma+sum[i])) {st=mij-1; val[i]=mij;}
					else in=mij+1;
				}		
			//cautarea binara
			suma=suma-((l-a[i]) / val[i] +1)+sum[i];
		}
  for(i=1;i<=n;i++) printf("%lld\n",val[i]);
  return 0;
}

void citire()
{
	long i;
  scanf("%ld %ld %lld %lld\n",&n,&m,&k,&l);
	for(i=1;i<=n;i++)
		  scanf("%ld\n",&a[i]);
	for(i=1;i<=n;i++)
		{
			sum[i]=1+(l-a[i])/m;
			suma+=sum[i];
		}
	suma=k-suma;
}