Pagini recente » Borderou de evaluare (job #366910) | Cod sursa (job #335755) | Cod sursa (job #543161) | Cod sursa (job #1759049) | Cod sursa (job #2036772)
#include<bits/stdc++.h>
using namespace std;
ifstream f("progresii.in");
ofstream g("progresii.out");
long long n,m,k,l;
long long v[100002];
long long srm[100002];
int sol[100002];
int main()
{
f>>n>>m>>k>>l;
for(int i=1;i<=n;++i)
f>>v[i];
for(int i=n;i>=1;--i)
{
srm[i]=srm[i+1];
srm[i]+=((l-v[i])/m+1);
}
for(int i=1;i<=n;++i)
{
long long b=1;
long long e=m;
bool ok=0;
while(b<=e)
{
long long mj=(b+e)/2;
if(mj==1|| (k-((l-v[i])/mj+1)>=srm[i+1] && k-((l-v[i])/(mj-1)+1)<srm[i+1]))
{
ok=1;
sol[i]=mj;
k=k-((l-v[i])/mj+1);
break;
}
else
if(k-((l-v[i])/mj+1)<srm[i+1])
b=mj+1;
else
e=mj-1;
}
if(ok==0){
g<<-1;
return 0;
}
}
for(int i=1;i<=n;++i)
g<<sol[i]<<'\n';
return 0;
}