Cod sursa(job #2454034)

Utilizator mirceatlxhaha haha mirceatlx Data 7 septembrie 2019 08:23:28
Problema Branza Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#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;
}