Cod sursa(job #2116426)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 27 ianuarie 2018 16:55:54
Problema Progresii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("progresii.in");
ofstream fout("progresii.out");
long long n, m, k, l, d[100002], sp[100002], sol[100002];
long long bs(long long poz)
{
    long long st=1, dr=m, mijl, total_consum;
    while(st<=dr)
    {
        mijl=st+((dr-st)>>1);
        total_consum=sp[poz+1]+d[poz]/mijl+1;
        if(total_consum<=k) dr=mijl-1;
        else st=mijl+1;
    }
    if(st>m)
    {
        fout<<-1<<'\n';
        exit(0);
    }
    k-=(total_consum-sp[poz+1]);
    return st;
}
int main()
{
    long long i, q;
    fin>>n>>m>>k>>l;
    for(i=1; i<=n; i++)
    {
        fin>>d[i];
        d[i]=l-d[i];
        sp[i]=1+d[i]/m;
    }
    for(i=n-1; i>=1; i--)
        sp[i]+=sp[i+1];
    for(i=1; i<=n; i++)
    {
        q=bs(i);
        sol[i]=q;
    }
    for(i=1; i<=n; i++)
        fout<<sol[i]<<'\n';
    return 0;
}