Cod sursa(job #3038883)

Utilizator david.pasarinDavid Pasarin david.pasarin Data 27 martie 2023 21:26:30
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<iostream>
#include<queue>
using namespace std;

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

int main() {
    int a[5000001];
    int n, k;
    fin >> n >> k;

    for (int i=0; i<n; i++)
        fin >> a[i];
    
    deque<int> sir;
    long long suma = 0;

    for (int i = 0; i < n; i++)
    {
        //verific daca elementul de pe i este mai mic decat ultimul element din deque, in cazul acesta facem pop
        while (!sir.empty() && a[i] <= a[sir.back()])
            sir.pop_back();
        sir.push_back(i); //adaugam index-ul i in coada deque-ului

        //verific daca elementul minim este egal cu cel de pe pozitia i-k, in cazul acesta il eliminam
        if (sir.front() == i-k)
            sir.pop_front();

        //afisam minimul in momentul in care subsecventele sunt mai mari sau egale cu k
        if (i >= k-1)
            suma += a[sir.front()];
    }
    fout << suma;

    fin.close();
    fout.close();
}