Pagini recente » Cod sursa (job #2680178) | Cod sursa (job #665763) | Cod sursa (job #2058048) | Cod sursa (job #1573129) | Cod sursa (job #2451748)
#include <stdio.h>
#include <stdlib.h>
int v[5000000];
int coada[5000000];
int main() {
FILE *fin = fopen( "deque.in", "r" ), *fout = fopen( "deque.out", "w" );
int n, k, i, j, st, dr;
long long s;
fscanf( fin, "%d%d", &n, &k );
for ( i = 0; i < n; i ++ ) {
fscanf( fin, "%d", &v[i] );
}
st = 0;
dr = 0;
for ( i = 0; i < k; i ++ ) {
while ( dr > st && v[coada[dr - 1]] >= v[i] ) {
dr --;
coada[dr] = 0;
}
coada[dr] = i;
dr ++;
}
s = v[coada[st]];
for ( i = k; i < n; i ++ ) {
while ( dr > st && v[coada[dr - 1]] >= v[i] ) {
dr --;
coada[dr] = 0;
}
coada[dr] = i;
dr ++;
if ( i - coada[st] >= k ) {
st ++;
}
s += v[coada[st]];
}
fprintf( fout, "%lld", s );
fclose( fin );
fclose( fout );
return 0;
}