Cod sursa(job #252808)

Utilizator albuaAlbu Alexandru albua Data 4 februarie 2009 22:18:37
Problema Progresii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 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],suma;

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-in)/2;
					if((1+(l-a[i])/mij) <=(suma+sum[i])) {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;*/
			//if(val[i]==0) val[i]=in;
			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=n-1;i>=1;i--)
		{
			sum[i]=1+(l-a[i])/m;
			suma+=sum[i];
		}
	suma=k-suma;
}