Pagini recente » Cod sursa (job #1703577) | Istoria paginii arhiva | Cod sursa (job #1051879) | Cod sursa (job #2808898) | Cod sursa (job #2887367)
#include <iostream>
#include <stack>
#include <fstream>
using namespace std;
ifstream in("branza.in");
ofstream out("branza.out");
long long n, s, t, i, pret, cerere, suma, minActual;
deque<pair<long long, pair<long long, long long>>> saptamaniDeq; //<pos, <pret, cerere>>
stack<pair<long long, pair<long long, long long>>> stivaSapt;
int main()
{
in >> n >> s >> t;
for(i = 1; i <= n; i++)
{
in >> pret >> cerere;
if(stivaSapt.empty() == false && stivaSapt.top().first + t < i)
stivaSapt.pop();
if(stivaSapt.empty() == false && pret <= stivaSapt.top().second.first + (i - stivaSapt.top().first) * s)
stivaSapt.pop();
if(stivaSapt.empty() == false)
minActual = stivaSapt.top().second.first + (i - stivaSapt.top().first) * s;
else
{
minActual = pret;
stivaSapt.push(make_pair(i, make_pair(pret, cerere)));
}
suma += minActual * cerere;
}
out<<suma;
return 0;
}