Cod sursa(job #2036150)

Utilizator EmplopiStefan Nitu Emplopi Data 10 octombrie 2017 13:05:15
Problema Branza Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#include <stdlib.h>

int v[100000], d[100000];

int main(){
    FILE *fin, *fout;
    int n, k, i, st, dr, pret, cant;
    long long s;
    fin=fopen("branza.in", "r");
    fout=fopen("branza.out", "w");
    fscanf(fin, "%d%d%d", &n, &pret, &k);
    st=0;
    dr=-1;
    s=0;
    for(i=0;i<n;i++){
        fscanf(fin, "%d%d", &v[i], &cant);
        if(st<=dr && d[st]==i-k)
            st++;
        while(st<=dr && v[i]<=v[d[dr]]+(i-d[dr])*pret)
            dr--;
        d[++dr]=i;
        s+=(long long)(v[d[st]]+(i-d[st])*pret)*(long long)cant;
        printf("%lld\n", (long long)(v[d[st]]+(i-d[st])*pret)*(long long)cant);
    }
    fprintf(fout, "%lld", s);
    fclose(fin);
    fclose(fout);

    return 0;
}