Cod sursa(job #821294)
Utilizator | Sintamarian David davidocea | Data | 21 noiembrie 2012 23:48:53 |
---|---|---|---|
Problema | Deque | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.5 kb |
#include <cstdio>
#include <deque>
using namespace std;
int f[5000010];
deque<int> deq;
int main ( ) {
freopen("deque.in","r",stdin);
//freopen("deque.out","w",stdout);
int n,k,i;
long long s=0;
scanf("%d %d",&n,&k);
for(i=1;i<=n;++i){
scanf("%d",&f[i]);
}
deq.push_front(1);
for(i=1;i<=n;++i){
for(;deq.front()<=deq.back()&&f[deq.back()]>=f[i];){
deq.pop_back();
}
deq.push_back(i);
if(deq.front()<=i-k){
deq.pop_front();
}
if(i>=k){
s+=f[deq.front()];
}
}
printf("%lld",s);
}