Cod sursa(job #3126796)

Utilizator FlaviaF7Fota Stefania-Flavia FlaviaF7 Data 6 mai 2023 23:31:37
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;

const int MAXN = 5000010;

int N, K;
int A[MAXN], deque[MAXN];
int front, back;
long long sum;

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

    in >> N >> K;

    // citesc sirul
    for (int i = 1; i <= N; i++) 
        in >> A[i];

    // Initializez deque-ul vid (back < front)
    front = 1, back = 0;

    for (int i = 1; i <= N; i++)
    {
        // cat timp elementul curent este mai mic decat ultimul element din deque, elimin pozitia ultimului element din deque 
        while (front <= back && A[i] <= A[deque[back]]) back--;		
        // adaug pozitia elementului curent in deque
        deque[++back] = i;

        // daca min == deque[i-K], ii elimin pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i
        if (deque[front] == i-K) front++;

        // afisez minimul (varful deque-ului)
        if (i >= K) sum += A[deque[front]]; 	
    }

    out << sum << '\n';

    return 0;
}