Pagini recente » Borderou de evaluare (job #321048) | sdistante | Cod sursa (job #2574349)
#include<bits/stdc++.h>
using namespace std;
const int NMAX=5000010;
int v[NMAX],Deque[NMAX];
int main(){
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int n,k;
scanf("%d%d", &n, &k);
for(int i=1;i<=n;i++)
scanf("%d", &v[i]);
int Front=1,Back=0;
long long sum=0;
for(int i=1;i<=n;i++){
while(Front<=Back && v[i]<=v[Deque[Back]])
Back--;
Deque[++Back]=i;
if(Deque[Front]==i-k)
Front++;
///minimul se afla in Deque[Front]
if(i>=k)
sum+=v[Deque[Front]];
}
printf("%lld\n", sum);
return 0;
}