Pagini recente » Cod sursa (job #1816750) | Cod sursa (job #2607099) | Cod sursa (job #985634) | Cod sursa (job #145088) | Cod sursa (job #1603993)
#include <bits/stdc++.h>
#define maxN 100002
#define ll long long
using namespace std;
int n, m, p[maxN], sol;
ll k, l, s;
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", &p[i]);
s = s + 1LL * ((l - p[i] + 1) / m);
}
}
void solve()
{
int i;
if (s > k)
{
sol = -1;
return ;
}
}
int ok(int a, int i)
{
if ((s - (1LL * (l - p[i] + 1) / m) + (1LL * (l - p[i] + 1)/ a)) <= k)
return 1;
return 0;
}
int bs(int I)
{
int i = m, p = 1 << 30;
while (p)
{
if (i - p > 0 && ok(i - p, I))
i -= p;
p /= 2;
}
return i;
}
void write()
{
int v, i;
freopen("progresii.out", "w", stdout);
if (sol == -1)
printf("-1");
else
{
for (i = 1; i <= n; ++ i)
{
v = bs(i);
if (k > 0)
s -= ((l - p[i] + 1) / m);
k -= ((l - p[i] + 1) / v);
printf("%d\n", v);
}
}
}
int main()
{
read();
solve();
write();
return 0;
}