Cod sursa(job #2725572)

Utilizator mirceaisherebina mircea mirceaishere Data 19 martie 2021 10:55:32
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;

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

int v[5000010], d[5000010];

int main(){

    /// Citire
    int n, k;
    fin >> n >> k;
    for (int i = 1; i <= n ; i++){
        fin >> v[i];
    }

    long long sol = 0;

    /// Inseram in deque primul element
    d[1] = 1;
    int st = 1;
    int dr = 1;

    for (int i = 2; i <= n; i++){

        /// Scoatem elementele mai mari decat v[i] deoarece nu vor mai fi utile
        while (v[i] < v[d[dr]] && st <= dr){
            /// pop_back()
            dr--;
        }

        /// Adaugam in deque elementul curent
        /// push_back(i)
        dr++;
        d[dr] = i;

        /// Scoatem din fata elementul care a iesit din secventa
        if(d[dr] - d[st] >= k){
            /// pop_front()
            st++;
        }

        /// Daca secventa are cel putin k numere adaugam minimul, care se afla in d[st]
        if (i >= k){
            sol += v[d[st]];
        }

    }

    fout << sol;

}