Pagini recente » Diferente pentru home intre reviziile 605 si 902 | Diferente pentru home intre reviziile 568 si 902 | Cod sursa (job #1208043) | Cod sursa (job #2169247) | Cod sursa (job #2266864)
#include <fstream>
#include <deque>
using namespace std;
ifstream INPUT_FILE("branza.in");
ofstream OUTPUT_FILE("branza.out");
struct branza{
long cost, kg, pos;
};
long n, s, t, sum;
deque<branza> deck;
int main()
{
INPUT_FILE >> n >> s >> t;
for (long i = 0; i < n; ++i) {
branza tmp;
tmp.pos = i;
INPUT_FILE >> tmp.cost>> tmp.kg;
while (!deck.empty() && tmp.cost< deck.back().cost + (i - deck.back().pos) * s) deck.pop_back();
deck.push_back(tmp);
sum += (deck.front().cost + (deck.back().pos - deck.front().pos) * s) * tmp.kg;
if (deck.back().pos - deck.front().pos >= t) deck.pop_front();
}
OUTPUT_FILE << sum;
return 0;
}