Pagini recente » Cod sursa (job #951697) | Cod sursa (job #294435) | Cod sursa (job #192015) | Cod sursa (job #1639951) | Cod sursa (job #1689515)
#include <bits/stdc++.h>
#define maxN 100002
#define ll long long
using namespace std;
int n, m, v[maxN], ans[maxN];
ll ps[maxN], k, l;
bool ok = 1;
void read()
{
int i;
freopen("progresii.in", "r", stdin);
scanf("%d %d %lld %lld", &n, &m, &k, &l);
for (i = 1; i <= n; ++ i)
{
scanf("%d", &v[i]);
ps[i] = ps[i - 1] + 1LL * (1 + (l - v[i]) / m) * (v[i] <= l);
}
}
int oks(int x, int s)
{
return 1LL * (ps[n] - ps[x] + 1LL * (1 + (l - v[x]) / s) * (v[x] <= l)) <= 1LL * k;
}
int bs(int x)
{
int i = m, p = 1 << 30;
while (p)
{
if (i - p > 0 && oks(x, i - p))
i -= p;
p /= 2;
}
return i;
}
void solve()
{
if (ps[n] > k)
{
ok = 0;
return ;
}
int i;
for (i = 1; i <= n; ++ i)
{
ans[i] = bs(i);
k -= (v[i] <= l) * (1 + ((l - v[i]) / ans[i]));
}
}
void write()
{
int i;
freopen("progresii.out", "w", stdout);
if (!ok)
{
printf("-1\n");
return ;
}else
for (i = 1; i <= n; ++ i)
printf("%d\n", ans[i]);
}
int main()
{
read();
solve();
write();
return 0;
}