Cod sursa(job #728329)

Utilizator danalex97Dan H Alexandru danalex97 Data 28 martie 2012 17:28:12
Problema Progresii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
using namespace std;
ifstream F("progresii.in");
ofstream G("progresii.out");

#define ll long long

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

int main()
{
	F>>N>>K>>M>>L;
	for (int i=1;i<=N;++i)
	{
		F>>D[i];
		D[i]=L-D[i]+1;
		Sum+= (D[i]-1) / K +1 ;
	}
	
	if ( M < Sum )
	{
		G<<"-1\n";
		F.close();
		G.close();
		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 ;
		G<<st<<'\n';
	}
	
	F.close();
	G.close();
	return 0;
}