Pagini recente » Cod sursa (job #824536) | Cod sursa (job #1303704) | Cod sursa (job #2213333) | Cod sursa (job #204968) | Cod sursa (job #677785)
Cod sursa(job #677785)
// Infoarena - Arhiva Educationala Deque
// Februrie 2012 Marius Dumitran
// Deque O(N)
#include<string.h>
#include<stdio.h>
#define maxn 50000001
int deque[maxn];
int time[maxn];
int last = -1;
int first = 0;
void add_deque (int val, int timp) {
while( last >= first && deque[ last ] >= val )
last--;
deque[ ++last ] = val;
time[ last ] = timp;
}
void remove_deque( int timp ) {
if( time[ first ] == timp )
first++;
}
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 <= K; ++i) {
int a;
scanf("%d", &a);
add_deque (a, i);
}
long long sol = deque[0];
for (int i = K + 1; i <= N; ++i) {
int a;
scanf("%d", &a);
add_deque (a, i);
remove_deque (i - K);
sol += deque[ first ];
}
printf("%lld\n", sol);
return 0;
}