Cod sursa(job #2667954)

Utilizator teofilotopeniTeofil teofilotopeni Data 4 noiembrie 2020 10:40:03
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <stdio.h>
#include <deque>

using namespace std;

////  GASIRE MINIM IN SUBSECVENTA
////  LISTA CU DOUA CAPETE

int v[5000010];

int main() {
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
	deque <int> h;
	int n, k, i, size = 1;
	scanf("%d %d %d", &n, &k, &v[1]);
	h.push_back(v[1]);
	long long suma = 0;
	for (i = 2; i < k; i++) {  //  CITIM ELEMENTELE DIN PRIMA SUBSECVENTA
        scanf("%d", &v[i]);
        while (size > 0 && v[i] < h.at(size - 1)) {
            size--;
            h.pop_back();
        }
        h.push_back(v[i]);
        size++;
	}
	for (i = k; i <= n; i++) {  //  CITIM CATE UN ELEM
        scanf("%d", &v[i]);
        while (size > 0 && v[i] < h.at(size - 1)) {
            size--;
            h.pop_back();
        }
        h.push_back(v[i]);
        size++;
        suma += h.at(0);
        if (v[i - k + 1] == h.at(0)) {
            h.pop_front();
            size--;
        }
	}
	printf("%d", suma);
	return 0;
}