Cod sursa(job #1953882)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 5 aprilie 2017 08:40:13
Problema Progresii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
using namespace std;
const int nmax=100003;
int p[nmax],rez[nmax];
int n,m;
long long k,l;
long long x[nmax];
long long time(long long pos,long long speed)
{
    long long ans=0;
    ans=(l-pos)/speed;
    if((l-pos)%speed==0) ++ans;
    return ans;
}
int main()
{
    freopen ("progresii.in","r",stdin);
    freopen ("progresii.out","w",stdout);
    scanf("%d%d%lld%lld",&n,&m,&k,&l);
    for(int i=1;i<=n;i++) scanf("%d",&p[i]);
    for(int i=n;i>=1;i--)
    {
        x[i]=time(1LL*p[i],1LL*m);
        x[i]+=x[i+1];
    }
    if(x[1]>k)
    {
        printf("-1\n");
        return 0;
    }
    for(int i=1;i<=n;i++)
    {
        int st=1,dr=m,rasp=0;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            long long v=time(1LL*p[i],1LL*mij);
            if(v+x[i+1]<=k)
            {
                rasp=mij;
                dr=mij-1;
            }
            else st=mij+1;
        }
        k-=time(p[i],rasp);
        printf("%d\n",rasp);
    }
}