Pagini recente » Cod sursa (job #1821294) | Cod sursa (job #2266055) | Cod sursa (job #850001) | Cod sursa (job #1446955) | Cod sursa (job #236363)
Cod sursa(job #236363)
#include <cstdio>
#include <deque>
#include <vector>
using namespace std;
int N,K,i;
deque<int> D;
vector<long long> A;
long long S,x;
void push() {
while ( !D.empty() && A[i] < A[D.back()] ) D.pop_back();
D.push_back(i);
}
void pop() {
while ( i-D.front()+1 > K )
D.pop_front();
}
void debug() {
deque<int>::iterator it;
for ( it=D.begin(); it!=D.end(); ++it )
fprintf(stderr, "%4lld(%2d) ", A[*it],*it);
fprintf(stderr, "\n");
}
int main() {
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d %d", &N, &K);
A.resize( N );
for ( i=0; i<K-1; ++i ) {
scanf("%lld", &x);
A[i] = x;
push();
// fprintf(stderr, "IN : ");debug();
}
for ( ; i<N; ++i ) {
scanf("%lld", &x);
A[i] = x;
push();
// fprintf(stderr, "IN : ");debug();
pop();
// fprintf(stderr, "OUT : ");debug();
S += A[D.front()];
}
printf("%lld\n", S);
return 0;
}