Cod sursa(job #2668697)

Utilizator teofilotopeniTeofil teofilotopeni Data 5 noiembrie 2020 10:39:18
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <stdio.h>
#include <deque>

using namespace std;

////  GASIRE MINIM IN SUBSECVENTA

int v[5000010];

int main() {
    freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);
	deque <long long> h;
	long long n = 0, k = 0, i;
	long long suma = 0;
	scanf("%d %d", &n, &k);

	for (i = 0; i < n; i++) {  //  CITIM CATE UN ELEM
        scanf("%d", &v[i]);
        while (!h.empty() && v[i] < h.back()) {  //  ELIMINAM TOATE ELEMENTELE MAI MARI CA CEL ACTUAL
            h.pop_back();
        }
        h.push_back(v[i]);  //  ADAUGAM ELEMENTUL ACTUAL
        if (i >= k - 1) {
            suma += h.at(0);
            if (v[i - k + 1] == h.at(0)) {  //  DACA CEL MAI MIC ELEMENT A IESIT DIN SUBSECVETA
                h.pop_front();
            }
        }
	}
	printf("%lld\n", suma);
	return 0;
}