Pagini recente » Cod sursa (job #1200058) | Cod sursa (job #2634460) | Cod sursa (job #552318) | Cod sursa (job #2941152) | Cod sursa (job #2116413)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("progresii.in");
ofstream fout("progresii.out");
int n, m, d[100002], sol[100002];
unsigned long long k, l, sp[100002];
int bs(int poz)
{
int st=1, dr=m, mijl;
unsigned long long total_consum;
while(st<=dr)
{
mijl=st+(dr-st)/2;
total_consum=sp[poz+1]+(unsigned long long)d[poz]/mijl;
if(d[poz]%mijl==0) total_consum++;
if(d[poz]<mijl) total_consum++;
if(total_consum<=k) dr=mijl-1;
else st=mijl+1;
}
if(st>m)
return -1;
k-=(unsigned long long)total_consum-sp[poz+1];
return st;
}
int main()
{
int i, q;
fin>>n>>m>>k>>l;
for(i=1; i<=n; i++)
{
fin>>d[i];
d[i]=l-d[i];
sp[i]=d[i]/m;
if(d[i]%m==0) sp[i]++;
if(d[i]<m) 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;
}