Pagini recente » Cod sursa (job #3181551) | Cod sursa (job #2043993) | Cod sursa (job #2592327) | Cod sursa (job #2622129) | Cod sursa (job #3126159)
#include <iostream>
#include <limits.h>
#include <fstream>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int arr[5000001], a[5000001], fr = 0, back = -1;
void push(int val) {
while (back >= fr && val < arr[back]) {
back--;
}
arr[++back] = val;
}
void pop(int val) {
if (arr[fr] == val) {
fr++;
}
}
int top() {
int rez = INT_MAX;
for (int i = fr; i <= back; i++) {
rez = min(rez, arr[i]);
}
return rez;
}
int main() {
int n, k;
f >> n >> k;
for (int i = 0; i < n; i++) {
f >> a[i];
}
for (int i = 0; i < k; i++) {
push(a[i]);
}
long long sum = top();
for (int i = k; i < n; i++) {
push(a[i]);
pop(a[i-k]);
sum += top();
}
g << sum << endl;
return 0;
}