Cod sursa(job #2887451)

Utilizator BojneaguBojneagu David-Alexandru Bojneagu Data 9 aprilie 2022 17:27:18
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

#define MAXN 5000020

int A[MAXN],deque[MAXN], i, k, n ;
long long sum=0 ;

int main()
{
    int front = 1;
    int back = 0;
    // initializam dequeul vid

    ifstream fin("deque.in");
    ofstream fout("deque.out");

    fin >> n >> k;

    // citim din fisierul de intrare si actualizam vectorul A
    for (i=1;i<=n;i++)
        fin >> A[i];

    for (i=1;i<=n;i++)
    {
        while(front<=back && A[i]<=A[deque[back]]) // daca avem elemente in deque, si elementul actual este mai mic decat ultimul element
            back--;                                // din deque, ii eliminam indicele

        deque[++back] = i;                         // asezam nr actual in fata ultimului nr din deque care este mai mic ca el

        if(deque[front] == i-k)                    // in cazul in care pe prima pozitie avem un indice care nu mai este in range-ul actual
            front++;

        if (i>=k)
            sum = sum + A[deque[front]] ;          // daca am ajuns la prima secventa posibila, adaugam primul element din deque
                                                   // care va fi mereu cel mai mic element, conform while-ului de mai sus

    }
    fout << sum;
    fin.close();
    fout.close();
    return 0;
}