Cod sursa(job #728316)

Utilizator danalex97Dan H Alexandru danalex97 Data 28 martie 2012 17:21:49
Problema Progresii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
using namespace std;
#define ll long long

int N,K;
ll M,L;
#define Nmax 100011
ll D[Nmax],Sum;

int main()
{
	
freopen("progresii.in","r",stdin);
freopen("progresii.out","w",stdout);
	
	scanf("%d%d%I64d%I64d",&N,&K,&M,&L);
	for (int i=1;i<=N;++i)
	{
		int x;
		scanf("%d",&x);
		D[i]=L-x+1;
		Sum+= (D[i]-1) / K +1 ;
	}
	
	if ( M < Sum )
	{
		printf("-1\n");
		return 0;
	}
	
	for (int i=1;i<=N;++i)
	{
		int cons=( D[i]-1 ) / K +1 ;
		int st=1,dr=K,mid;
		while ( st<dr )
		{
			mid=(st+dr)/2;
			if ( Sum - cons + (D[i]-1) /mid +1 <= M )
				dr=mid;
			else
				st=mid+1;
		}
		Sum= Sum - cons + (D[i]-1) /st +1 ;
		printf("%d\n",st);
	}
	
	return 0;
}