Cod sursa(job #2728251)

Utilizator andre.anghelacheAndreea Anghelache andre.anghelache Data 22 martie 2021 22:46:49
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

/*
Idee:
    - parcurgem toate elementele vectorului
    - cat timp deque nu e empty si elementul curent A[i] <= A[back] scoatem elemente
    din deque
 */

int main() {
    ifstream in("deque.in");
    ofstream out("deque.out");

    vector<int> A;
    deque<int> deque;
    int N, K, x, suma=0;

    in>>N>>K;
    A.push_back(0);
    for(int i=1; i<=N; i++)
    {
        in>>x;
        A.push_back(x);
    }


    for(int i=1; i<=N; i++)
    {
        while(!deque.empty() && A[i]<=A[deque.back()])
            deque.pop_back(); //il scoate mereu pe cel mai mare
        deque.push_back(i);

        if(deque.front() == i-K)
            deque.pop_front(); //eliminam elementul minim (care e in front ul cozii), pentru ca el a fost deja adaugat la suma la pasul anterior
        if(i>=K)
            suma+=A[deque.front()];

    }


    out<<suma;
    return 0;
}