Pagini recente » Cod sursa (job #1388742) | Cod sursa (job #898705) | Cod sursa (job #2687893) | Cod sursa (job #859005) | Cod sursa (job #728329)
Cod sursa(job #728329)
#include <fstream>
using namespace std;
ifstream F("progresii.in");
ofstream G("progresii.out");
#define ll long long
int N,K;
ll M,L;
#define Nmax 100011
ll D[Nmax],Sum;
int main()
{
F>>N>>K>>M>>L;
for (int i=1;i<=N;++i)
{
F>>D[i];
D[i]=L-D[i]+1;
Sum+= (D[i]-1) / K +1 ;
}
if ( M < Sum )
{
G<<"-1\n";
F.close();
G.close();
return 0;
}
for (int i=1;i<=N;++i)
{
int cons=( D[i]-1 ) / K +1 ;
int st=1,dr=K,mid;
while ( st<dr )
{
mid=(st+dr)/2;
if ( Sum - cons + (D[i]-1) /mid +1 <= M )
dr=mid;
else
st=mid+1;
}
Sum= Sum - cons + (D[i]-1) /st +1 ;
G<<st<<'\n';
}
F.close();
G.close();
return 0;
}