Pagini recente » Cod sursa (job #481218) | Cod sursa (job #2749447) | Cod sursa (job #1409553) | Cod sursa (job #2758806) | Cod sursa (job #486830)
Cod sursa(job #486830)
#include <stdio.h>
long long n, m, k, l, sol, s;
long long v[100002];
void cautare (long long i, long long st, long long dr)
{
long long m;
while (st <= dr)
{
m = (st + dr) >> 1;
if (s + v[i] / m + 1 <= k)
{
dr = m - 1;
sol = m;
}
else
st = m + 1;
}
}
int main ()
{
freopen ("progresii.in", "r", stdin);
freopen ("progresii.out", "w", stdout);
scanf ("%lld %lld %lld %lld", &n, &m, &k, &l);
long long i;
for (i = 1; i <= n; i ++)
{
scanf ("%lld", &v[i]);
v[i] = l - v[i];
s += v[i] / m + 1;
}
if (s > k)
{
printf ("-1\n");
return 0;
}
for (i = 1; i <= n; i ++)
{
s -= v[i] / m + 1;
cautare (i, 1, m);
s += v[i] / sol + 1;
printf ("%lld\n", sol);
}
return 0;
}