Pagini recente » Cod sursa (job #879340) | Cod sursa (job #1451054) | Cod sursa (job #1396498) | Cod sursa (job #69724) | Cod sursa (job #2454034)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <deque>
#include <vector>
#define maxVectorSize 100005
using namespace std;
ifstream fin("branza.in");
ofstream fout("branza.out");
struct Stats{
int position, price, number;
};
int weekNumber, depositPrice, outOfDateTime;
long long result = 0;
vector < Stats > weekStats(maxVectorSize);
deque < Stats > primeDeque;
int main()
{
int price, number;
fin >> weekNumber >> depositPrice >> outOfDateTime;
for(int i = 1 ; i <= weekNumber; i++)
{
fin >> price >> number;
weekStats[i].price = price;
weekStats[i].number = number;
weekStats[i].position = i;
}
primeDeque.push_back(weekStats[1]);
result += weekStats[1].price * weekStats[1].number * 1LL;
for(int i = 2 ; i <= weekNumber ; i++)
{
while(!primeDeque.empty() && primeDeque.front().position == i - outOfDateTime - 1)
primeDeque.pop_front();
while(!primeDeque.empty() && weekStats[i].price <= primeDeque.back().price + (i - primeDeque.back().position) * depositPrice)
primeDeque.pop_back();
primeDeque.push_back(weekStats[i]);
result += 1LL * primeDeque.front().price * weekStats[i].number + 1LL * depositPrice * (weekStats[i].position - primeDeque.front().position) * weekStats[i].number;
}
fout << result << "\n";
return 0;
}