Pagini recente » Cod sursa (job #1344204) | Cod sursa (job #2325837) | Cod sursa (job #2263240) | Cod sursa (job #1470306) | Cod sursa (job #163585)
Cod sursa(job #163585)
#include<stdio.h>
long n,m;
long long k,l;
long long sum;
long p[100005],c[100005];
void scan()
{
long i;
long long nr;
scanf("%ld%ld%lld%lld",&n,&m,&k,&l);
for (i=1;i<=n;i++)
{
scanf("%ld",&p[i]);
nr=(l-p[i])/m+1;
c[i]=m;
sum=sum+nr;
}
}
long cautbin(long st,long dr,long poz,long i)
{
long mi;
long long nr;
mi=(st+dr)/2;
if (st>dr)
return poz;
nr=(l-p[i])/mi+1;
if (sum+nr<=k)
return cautbin(st,mi-1,mi,i);
else return cautbin(mi+1,dr,poz,i);
}
void solve()
{
long i,j,w;
long long nr;
for (i=1;i<=n;i++)
{
nr=(l-p[i])/m+1;
sum-=nr;
w=cautbin(1,m,m,i);
for (j=w;j>=1;j--)
{
nr=(l-p[i])/j+1;
if (sum+nr>k)
{
break;
}
}
j++;
c[i]=j;
nr=(l-p[i])/j+1;
sum+=nr;
}
}
void print()
{
long i;
for (i=1;i<=n;i++)
printf("%ld\n",c[i]);
}
int main()
{
freopen("progresii.in","r",stdin);
freopen("progresii.out","w",stdout);
scan();
if (sum>k)
printf("-1\n");
else if (sum==k)
{long i;
for (i=1;i<=n;i++)
printf("%ld\n",m);
}
else {
solve();
print();
}
return 0;
}