Cod sursa(job #1483839)

Utilizator Athena99Anghel Anca Athena99 Data 9 septembrie 2015 23:35:29
Problema Progresii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

ifstream fin("progresii.in");
ofstream fout("progresii.out");

const int nmax= 100000;

int p[nmax+1], s[nmax+2];

int main(  ) {
    int n, m, k, l, ok= 0;
    fin>>n>>m>>k>>l;
    for ( int i= 1; i<=n; ++i ) {
        fin>>p[i];
        ok= ok+(l-p[i])/m;
    }

    if ( ok>k ) {
        fout<<"-1\n";
    } else {
        for ( int i= n; i>=1; --i ) {
            s[i]= s[i+1]+(l-p[i])/m+1;
        }

        int m2;
        for ( m2= 1; m2*2<=m; m2*= 2 ) ;
        for ( int i= 1; i<=n; ++i ) {
            int sol= m;
            for ( int step= m2; step>0; step/= 2 ) {
                if ( sol-step>=1 && (l-p[i])/(sol-step)+1<=k-s[i+1] ) {
                    sol-= step;
                }
            }

            k= k-(l-p[i])/sol-1;
            fout<<sol<<"\n";
        }
    }

    return 0;
}