Cod sursa(job #3127352)

Utilizator willOcanaru Mihai will Data 7 mai 2023 14:52:12
Problema Deque Scor 45
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("deque.in");
ofstream g("deque.out");

#define MAX_ELEMENTS 5000010
long long elements[MAX_ELEMENTS];
long long index = 0;

template<typename T>
class Deque{

    private:
        vector<T> deque;

    public:
        void push_front(T x){
            deque.insert(deque.begin(), x);
        }

        void push_back(T x){
            deque.push_back(x);
        }

        void pop_back(){
            deque.pop_back();
        }

        void pop_front(){
            deque.erase(deque.begin());
        }

        T front(){
            return deque.front();
        }

        T back(){
            return deque.back();
        }

        size_t size(){
            return deque.size();
        }

        bool empty(){
            return deque.empty();
        }
};

void display(Deque<pair<long long, long long>> deque){
    while(!deque.empty()){
        cout << deque.front().first << " ";
        deque.pop_front();
    }
    cout << endl;
}

int main()
{
    Deque<pair<long long, long long>> deque;

    // vector<int> elements;
	

    long long no_of_elements, interval, x, sum = 0, last;
    f >> no_of_elements >> interval;

    for(long long i=0; i<no_of_elements; i++){
        f >> x;
        // elements.push_back(x);
		elements[index ++] = x;
    }

    for(long long i=0; i<no_of_elements; i++){

        while(!deque.empty() && elements[i] <= deque.back().first){
            deque.pop_back();    
        }

        deque.push_back({elements[i], i});

        if(deque.front().second <= i - interval) deque.pop_front();

        if(i >= interval - 1){ 
            sum += deque.front().first;
         }
    }

    g << sum;	

    return 0;
}