Pagini recente » Borderou de evaluare (job #2073172) | Cod sursa (job #379522) | Cod sursa (job #1988211) | Cod sursa (job #3212710) | Cod sursa (job #2656281)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("progresii.in");
ofstream fout("progresii.out");
const int nmax = 100005;
long long n, m, k, l, v[nmax], cost;
int main(){
fin >> n >> m >> k >> l;
for (int i = 1; i <= n; ++i){
fin >> v[i];
cost = 1LL * cost + 1 + 1LL * (l - v[i]) / m;
}
if (cost > k){
fout << -1 << "\n";
return 0;
}
for (int i = 1; i <= n; ++i){
long long st = 1, dr = m, ans = m;
cost -= 1 + (l - v[i]) / m;
while (st <= dr){
long long mid = 1LL * (st + dr) / 2;
if (1LL * cost + 1 + (l - v[i]) / mid <= k){
ans = mid;
dr = mid - 1;
}
else{
st = mid + 1;
}
}
fout << ans << "\n";
cost = 1LL * cost + 1LL * 1 + (l - v[i]) / ans;
}
fin.close();
fout.close();
return 0;
}