Cod sursa(job #854443)
#include <cstdio>
#include <cstdlib>
int v [ 5000001 ] , deque [ 5000000 ] ;
int n , K ;
int min , max , val ;
long long s = 0;
void afisare ( int *deque , int min , int max )
{
printf ( "\n" ) ;
for ( int i = min; i <= max; i++ )
printf( "%2d ", deque [ i ] ) ;
printf ( "\n" ) ;
}
int main ()
{
FILE *f , *g ;
f = fopen ( "deque.in" , "r" ) ;
g = fopen ( "deque.out" , "w" ) ;
fscanf ( f , "%d %d" , &n , &K ) ;
for ( int i = 1 ; i <= n ; i++ )
fscanf ( f , "%d" , &v[i] ) ;
min = 1;
max = 0;
for ( int i = 1 ; i <= n ; i++ )
{
val = v[i] ;
while ( val <= v [ deque [ max ] ] && min <= max ) max-- ;
deque[ ++max ] = i ;
if ( deque[ min ] == i-K ) min++;
if ( i >= K ) s += v[ deque [ min ] ] ;
}
fprintf ( g , "%lld" , s ) ;
return 0;
}