Cod sursa(job #252794)

Utilizator albuaAlbu Alexandru albua Data 4 februarie 2009 22:04:37
Problema Progresii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define DMax 100009

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

void citire();

int main()
{
	freopen("progresii.in","r",stdin);
	freopen("progresii.out","w",stdout);
	citire();
	for(i=1;i<=n;i++)
		{
			in=1;
			st=m;
			while(in<=st)
				{
					mij=(in+st)/2;
					if((k-(1+(l-a[i])/mij)) >= sum[i+1]) {st=mij-1; val[i]=mij;}
					else in=mij+1;
				}		
/*			for(in=1;in<=m;in++)
				if((k-(1+(l-a[i])/in)) >= sum[i+1])break;*/
			//val[i]=in;
			k=k-(1+(l-a[i])/val[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]);
	sum[n]=1+(l-a[n])/m;
	for(i=n-1;i>=1;i--)
		sum[i]=sum[i+1]+1+(l-a[i])/m;
}