Pagini recente » Cod sursa (job #1872482) | Cod sursa (job #53801) | Cod sursa (job #1702323) | Cod sursa (job #63962) | Cod sursa (job #2668697)
#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;
}