Pagini recente » Cod sursa (job #1870932) | Cod sursa (job #907460) | Cod sursa (job #2774842) | Cod sursa (job #2632237) | Cod sursa (job #2269421)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream f("branza.in");
ofstream g("branza.out");
deque<long long>deck;
long long zile, ist,pret_depozitare, timp_depozitare,s;
struct{
long long pret, necesitate;
}branza[100005];
void rezolvare()
{
for (int i=1; i<=zile; i++)
{
f >> branza[i].pret >> branza[i].necesitate;
while (!deck.empty() && branza[deck.back()].pret+pret_depozitare>=branza[i].pret)
deck.pop_back();
if (!deck.empty() && i-deck.front()==timp_depozitare+1)
deck.pop_front();
deck.push_back(i);
s=s+(branza[deck.front()].pret*branza[i].necesitate+((i-deck.front()))*pret_depozitare*branza[i].necesitate);
}
}
int main() {
ios_base::sync_with_stdio(false);
f >> zile >> pret_depozitare >> timp_depozitare;
rezolvare();
g << s;
return 0;
}