Pagini recente » Cod sursa (job #3212322) | Cod sursa (job #906000) | Cod sursa (job #1667002) | Cod sursa (job #1480800) | Cod sursa (job #335241)
Cod sursa(job #335241)
#include <cstdio>
#define maxn 100100
using namespace std;
int n, i, j, m, k, l, sol;
int v[maxn], x[maxn];
bool bun(int sp, int nrmax) {
if ((l - v[i]) / sp + 1 <= nrmax)
return true;
return false;
}
int bsearch(int l, int r, int nrmax) {
int 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("%d%d%d%d", &n, &m, &k, &l);
for (i = 1; i <= n; i++)
scanf("%d", &v[i]);
for (i = n; i >= 1; i--)
x[i] = x[i + 1] + (l - v[i]) / m + 1;
for (i = 1; i <= n; i++) {
sol = bsearch(1, m, k - x[i + 1]);
k -= (l - v[i]) / sol + 1;
printf("%d\n", sol);
}
return 0;
}