Cod sursa(job #3127399)

Utilizator willOcanaru Mihai will Data 7 mai 2023 15:13:33
Problema Deque Scor 45
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.83 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:

		Deque(){
			deque.shrink_to_fit();
		}

        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[index ++] = x;
    // }

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

		f >> x;

        while(!deque.empty() && x <= deque.back().first){
            deque.pop_back();    
        }

        deque.push_back({x, i});

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

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

    g << sum;	

    return 0;
}