Cod sursa(job #470699)

Utilizator mihai995mihai995 mihai995 Data 15 iulie 2010 12:36:54
Problema Progresii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <fstream>
using namespace std;

long long a[1<<17];
int m;

ifstream in("progresii.in");
ofstream out("progresii.out");

int bsearch(int d,int n)
{
	int i,step=1<<30;
	for (i=0;step;step>>=1)
		if (i+step<=m && (d+i+step-1)/(i+step)>n)
			i+=step;
	return i+1;
}

int main()
{
	long long cant=0,k,l;
	int n,i,x;
	in>>n>>m>>k>>l;
	for (i=1;i<=n;i++)
	{
		in>>a[i];
		a[i]=l-a[i]+1;
		cant+=(a[i]+m-1)/m;
	}
	if (cant>k)
	{
		out<<"-1\n";
		return 0;
	}
	for (i=1;i<=n;i++)
	{
		cant-=(a[i]+m-1)/m;
		x=bsearch(a[i],k-cant);
		cant+=(a[i]+x-1)/x;
		out<<x<<"\n";
	}
	return 0;
}