Cod sursa(job #2554998)

Utilizator marius004scarlat marius marius004 Data 23 februarie 2020 16:26:23
Problema Branza Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <deque>

std::ifstream f("branza.in");
std::ofstream g("branza.out");

const int NMAX = 100'005;
long long n,s,t,v[NMAX],c[NMAX],p[NMAX],sol;
std::deque<int>d;

//c[] - costul de productie 1 kg
//p[] - cantitatea pentru o anumita saptamana

int main(){

    f >> n >> s >> t;

    for(int i = 1;i <= n;++i)
        f >> c[i] >> p[i];

    /// Branza
    /// Folosim un deque
    /// Punem in deque primul element(defpt punem indexul acestuia)
    /// In deque.front() trebuie sa avem costul minim de depozitare + producere , perioada de depozitare nedepasind k zile

    sol += c[1] * p[1];
    d.push_back(1);

    for(int i = 2;i <= n;++i){

        while(!d.empty() && c[i] <= (i - d.back()) * s + c[d.back()])
            d.pop_back();

        d.push_back(i);

        if(i - d.front() > t)
            d.pop_front();

        sol += ( (i - d.front()) * s * p[i] + c[d.front()] * p[i]);
    }

    g << sol;

    return 0;
}