Pagini recente » Cod sursa (job #2387992) | Cod sursa (job #1101060) | Cod sursa (job #2402741) | Cod sursa (job #694387) | Cod sursa (job #1994235)
#include <cstdio>
using namespace std;
FILE *fin = fopen ("progresii.in", "r"), *fout = fopen ("progresii.out", "w");
const int nmax = 1e5;
long long p[nmax + 1];
int main() {
int n, m; long long k, l;
fscanf(fin, "%d%d%lld%lld", &n, &m, &k, &l);
long long cmin = 0;
for (int i = 1; i <= n; ++ i) {
fscanf (fin, "%lld", &p[ i ]);
p[ i ] = l - p[ i ];
if (p[ i ] >= 0) {
cmin += p[ i ] / m + 1;
}
}
int n2;
for (n2 = 1; n2 <= m / 2; n2 <<= 1) {
}
if (cmin > k) {
fprintf(fout, "-1\n");
} else {
for (int i = 1; i <= n; ++ i) {
if (p[ i ] < 0) {
fprintf(fout, "%d\n", 1);
continue;
}
cmin -= p[ i ] / m + 1;
int ans = m;
for (int step = n2; step > 0; step >>= 1) {
if (ans - step > 0 && p[ i ] / (ans - step) + 1 <= k - cmin) {
ans -= step;
}
}
fprintf(fout, "%d\n", ans);
k -= p[ i ] / ans + 1;
}
}
fclose( fin );
fclose( fout );
return 0;
}