Cod sursa(job #1851128)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 19 ianuarie 2017 13:00:50
Problema Progresii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;

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

const int DIM = 1e5 + 5;

int p[DIM];

inline long long cst( long long l, int p, int m ) {
    return ( l - p ) / m + 1;
}

int main( void ) {
    ios::sync_with_stdio( false );

    long long k, l; int n, m;
    in >> n >> m >> k >> l;

    long long nr = 0;
    for( int i = 1; i <= n; i ++ ) {
        in >> p[i];
        nr += cst( l, p[i], m );
    }

    if( nr > k )
        out << -1 << endl;
    else {
        for( int i = 1; i <= n; i ++ ) {
            int st = 1, fi = m;

            while( st <= fi ) {
                int md = st + ( fi - st ) / 2;

                if( nr - cst( l, p[i], m ) + cst( l, p[i], md ) <= k )
                    fi = md - 1;
                else
                    st = md + 1;
            }

            out << st << "\n";
            nr += cst( l, p[i], st ) - cst( l, p[i], m );
        }
    }

    return 0;
}