Pagini recente » Cod sursa (job #3248234) | Cod sursa (job #76208) | Cod sursa (job #445697) | Cod sursa (job #1675878) | Cod sursa (job #2127590)
#include <cstdio>
#include <deque>
#include <iostream>
using namespace std;
#define NMAX 5000002
long long sir[NMAX], minim[NMAX];
deque<int> pos;
int n, k;
void calc_min(){
int len = 0;
pos.push_back(1);
minim[1] = sir[1];
for(int i = 1; i <= n; ++i){
while(sir[pos[len]] > sir[i] && i - pos[len] <= k - 1){
minim[pos[len]] = sir[i];
pos.pop_back();
len--;
}
if(sir[i - 2] != 0 && sir[i - 1] != 0 && sir[i + 1] != 0 && sir[i + 2] != 0 && minim[i] == 0)
minim[i] = sir[i];
pos.push_back(i);
len++;
}
}
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; ++i)
scanf("%lld", &sir[i]);
calc_min();
long long sum = 0LL;
for(int i = 1; i <= n - k + 1; ++i)
sum += minim[i];
printf("%lld", sum);
return 0;
}