Pagini recente » Cod sursa (job #265252) | Cod sursa (job #582995) | Cod sursa (job #2636486) | Cod sursa (job #643523) | Cod sursa (job #2731596)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("branza.in");
ofstream fout("branza.out");
deque<int> pret, poz; // puteam folosi la fel de usor un deque de tupluri
int main(){
int N, T, S, C, P, suma;
suma = 0;
fin >> N >> S >> T;
for(int i = 0; i < N; i++)
{
fin>>C>>P;
while(!pret.empty() && pret.back() + S * (i - poz.back()) >= C) // cat timp cozile nu sunt goale si costul de productie al saptamanii anterioare +
{ //pretul de depozitare al saptamanilor anterioare e mai mare ca si costul de productie curent
pret.pop_back(); //eliminam din deques pretul si pozitia saptamanii anterioare
poz.pop_back();
}
pret.push_back(C); //adaugam pretul si pozitia saptamanii curente la dreapta
poz.push_back(i);
suma += P * (pret.front() + S * (i - poz.front()));
// crestem suma
if(poz.back() <= i-T) //daca saptamana din varf <= saptamana curenta - termen de valabilitate
{
pret.pop_back(); // o eliminam
poz.pop_back();
}
}
fout << suma;
return 0;
}