Cod sursa(job #325749)

Utilizator ProtomanAndrei Purice Protoman Data 22 iunie 2009 10:54:26
Problema Progresii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <algorithm>
#include <stdio.h>

#define MAX 100024
#define ll long long

using namespace std;

ll n, m, k, l, gs, fol;
ll lung[MAX];

inline void binSearch(int ind, ll fr, ll ls)
{
	if (fr > ls)
		return;

	int med = (fr + ls) / 2;

	if (fol - (lung[ind] / m + 1) + (lung[ind] / (ll) med + 1) <= k)
	{
		gs = med;

		binSearch(ind, fr, med - 1);
	}
	else binSearch(ind, med + 1, ls);
}

int main()
{
	freopen("progresii.in", "r", stdin);
	freopen("progresii.out", "w", stdout);

	scanf("%lld %lld %lld %lld", &n, &m, &k, &l);

	for (ll i = 1; i <= n; i++)
	{
		ll start;
		scanf("%lld", &start);

		lung[i] = l - start;
		fol += lung[i] / m + 1;
	}

	for (ll i = 1; i <= n; i++)
	{
		binSearch(i, (ll) 1, m);
		fol += (lung[i] / gs) - (lung[i] / m);

		printf("%lld\n", gs);
	}

	fclose(stdin);
	fclose(stdout);
	return 0;
}