Pagini recente » Cod sursa (job #953796) | Cod sursa (job #3209371) | Cod sursa (job #2251272) | Cod sursa (job #2643698) | Cod sursa (job #2116406)
#include <bits/stdc++.h>
using namespace std;
FILE *fin=fopen("progresii.in","r");
ofstream fout("progresii.out");
int n, m, d[100002], sol[100002];
long long k, l, sp[100002];
int bs(int poz)
{
int st=1, dr=m, mijl;
long long total_consum;
while(st<=dr)
{
mijl=st+(dr-st)/2;
total_consum=sp[poz+1]+(long long)d[poz]/mijl;
if(d[poz]%mijl==0) total_consum++;
if(total_consum<=k) dr=mijl-1;
else st=mijl+1;
}
if(st>m)
return -1;
k-=(long long)total_consum-sp[poz+1];
return st;
}
int main()
{
int i, q;
fscanf(fin, "%d%d%lld%lld", &n, &m, &k, &l);
for(i=1; i<=n; i++)
{
fscanf(fin, "%d", &d[i]);
d[i]=l-d[i];
sp[i]=d[i]/m;
if(d[i]%m==0) sp[i]++;
}
for(i=n-1; i>=1; i--)
sp[i]+=sp[i+1];
for(i=1; i<=n; i++)
{
q=bs(i);
if(q==-1)
{
fout<<-1<<'\n';
return 0;
}
sol[i]=q;
}
for(i=1; i<=n; i++)
fout<<sol[i]<<'\n';
return 0;
}