Pagini recente » Cod sursa (job #852690) | Cod sursa (job #2877697) | Cod sursa (job #1968021) | Cod sursa (job #3152666) | Cod sursa (job #1413469)
#include <cstdio>
#include <cctype>
#define Nmax 100010
#define Bsize 65536
using namespace std;
int n , m , p , i;
int A[Nmax];
long long K , L , ramas , suc;
char Buffer[Bsize];
void get_number(int &x)
{
x = 0;
while (!isdigit(Buffer[p]))
{
if (p == Bsize - 1)
{
fread(Buffer , 1 , Bsize , stdin);
p = 0;
}
else p++;
}
while (isdigit(Buffer[p]))
{
x = x * 10 + Buffer[p] - '0';
if (p == Bsize - 1)
{
fread(Buffer , 1 , Bsize , stdin);
p = 0;
}
else p++;
}
}
int Binary_Search(int start , long long &x)
{
int st = 1; int dr = m; int sol = 0;
long long used = (L - 1LL * start) / (1LL * m) + 1LL;
for ( ; st <= dr; )
{
long long half = (1LL * st + 1LL * dr) >> 1;
int mij = int(half);
suc = (L - 1LL * start) / (1LL * mij) + 1LL;
if (x + used >= suc) sol = mij , dr = mij - 1;
else st = mij + 1;
}
if (sol > 0);
else sol = m;
suc = (L - 1LL * start) / (1LL * sol) + 1LL;
x += used; x -= suc;
return sol;
}
int main()
{
freopen("progresii.in","r",stdin);
freopen("progresii.out","w",stdout);
scanf("%d %d %lld %lld", &n, &m, &K, &L);
ramas = K;
fread(Buffer , 1 , Bsize , stdin); p = 0;
for (i = 1; i <= n; ++i)
{
get_number(A[i]);
suc = (L - 1LL * A[i]) / (1LL * m) + 1LL;
ramas -= 1LL * suc;
if (ramas < 0)
{
printf("-1\n");
return 0;
}
}
for (i = 1; i <= n; ++i)
printf("%d\n", Binary_Search(A[i] , ramas));
return 0;
}