Cod sursa(job #2657995)

Utilizator loraclorac lorac lorac Data 12 octombrie 2020 20:54:14
Problema Progresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("progresii.in");
ofstream out("progresii.out");
typedef long long ll;
const ll lim=1e5+4;
ll p[lim],v[lim];
int main()
{
    ll n,m,k,d;
    in>>n>>m>>k>>d;
    for(ll i=1;i<=n;++i)
    {
        in>>p[i];
        p[i]=d-p[i];
        v[i]=m;
        k-=p[i]/m+1;
    }
    if(k<0)
    {
        out<<-1<<'\n';
        return 0;
    }
    for(ll i=1;i<=n and k>=0;++i)
    {
        ll l=max(1LL,p[i]/(k+p[i]/m+1)),r=m,med;
        while(l<r)
        {
            med=(l+r)/2;
            if(p[i]/med-p[i]/m<=k)
                r=med;
            else l=med+1;
        }
        v[i]=l;
        k-=p[i]/l-p[i]/m;
    }
    for(ll i=1;i<=n;++i)
        out<<v[i]<<'\n';
    return 0;
}