Cod sursa(job #1851161)

Utilizator robx12lnLinca Robert robx12ln Data 19 ianuarie 2017 14:01:02
Problema Progresii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
using namespace std;
ifstream fin("progresii.in");
ofstream fout("progresii.out");
int n, m, st, dr, mid;
long long k, d, suc;
int v[100005], sol[100005];
int main(){
    fin >> n >> m >> k >> d;
    suc = 0;
    for( int i = 1; i <= n; i++ ){
        fin >> v[i];
        suc += ( d - v[i] + 1 );
        sol[i] = 1;
    }
    int p = n;
    while( suc > k && p >= 1 ){
        suc = suc - ( d - v[p] + 1 ) + ( d - v[p] + 1 ) / m + 1;
        sol[p] = n;
        p--;
    }
    if( suc > k ){
        fout << "-1";
        return 0;
    }
    p++;
    st = 1;
    dr = m;
    while( st <= dr ){
        mid = ( st + dr ) / 2;
        if( suc - ( ( d - v[p] + 1 ) / m + 1 ) + ( d - v[p] + 1 ) / mid + 1 <= k ){
            dr = mid - 1;
        }else{
            st = mid + 1;
        }
    }
    sol[p] = dr;
    for( int i = 1; i <= n; i++ ){
        fout << sol[i] << "\n";
    }
    return 0;
}