Pagini recente » Cod sursa (job #543210) | Cod sursa (job #2501140) | Cod sursa (job #917822) | Cod sursa (job #588597) | Cod sursa (job #728292)
Cod sursa(job #728292)
#include <fstream>
using namespace std;
ifstream F("progresii.in");
ofstream G("progresii.out");
#define ll long long
int N,M,K,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 )
st=mid+1;
else
dr=mid;
}
Sum= Sum - cons + (D[i]-1) /mid +1 ;
G<<st<<'\n';
}
F.close();
G.close();
return 0;
}