Pagini recente » Cod sursa (job #2428494) | Cod sursa (job #2091566) | Cod sursa (job #1632280) | Cod sursa (job #1446742) | Cod sursa (job #335258)
Cod sursa(job #335258)
#include <cstdio>
#define maxn 100100
using namespace std;
long long n, i, j, m, k, l, sol;
long long v[maxn], x[maxn], rez[maxn];
bool bun(long long sp, long long nrmax) {
if ((l - v[i]) / sp + 1 <= nrmax)
return true;
return false;
}
long long bsearch(long long l, long long r, long long nrmax) {
long long m, rez = 2000000000;
while (l <= r) {
m = (l + r) / 2;
if (bun(m, nrmax)) {
if (m < rez)
rez = m;
r = m - 1;
}
else
l = m + 1;
}
return rez;
}
int main() {
freopen("progresii.in", "r", stdin);
freopen("progresii.out", "w", stdout);
//x[i] = costu minim pe care il pot obtine de la i incolo
scanf("%lld%lld%lld%lld", &n, &m, &k, &l);
for (i = 1; i <= n; i++)
scanf("%lld", &v[i]);
for (i = n; i >= 1; i--)
x[i] = x[i + 1] + (l - v[i]) / m + 1;
if (k < x[1]) {
printf("-1\n");
return 0;
}
for (i = 1; i <= n; i++) {
sol = bsearch(1, m, k - x[i + 1]);
k -= (l - v[i]) / sol + 1;
rez[i] = sol;
}
for (i = 1; i <= n; i++)
printf("%lld\n", rez[i]);
return 0;
}