Pagini recente » Cod sursa (job #2052199) | Cod sursa (job #2926831) | Cod sursa (job #2931184) | Cod sursa (job #2929660) | Cod sursa (job #3170791)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 5000000
int coada[ MAXN ], a[ MAXN ], left, right = -1;
int isempty( )
{
if( left <= right )
return 0;
return 1;
}
int front( )
{
return coada[ right ];
}
int back( )
{
return coada[ left ];
}
void pop_fr( )
{
right--;
}
void pop_bk( )
{
left++;
}
void push_fr( int a )
{
right++;
coada[ right ] = a;
}
int main()
{
FILE *fin, *fout;
int n, k, i, j, x;
long long suma = 0;
fin = fopen( "deque.in", "r" );
fscanf( fin, "%d%d", &n, &k );
for( i = 0; i < n; i++ )
{
fscanf( fin, "%d", &a[ i ] );
}
fclose( fin );
for( i = 0; i < n; i++ )
{
while( a[ i ] <= a[ front( ) ] && isempty( ) == 0 )
{
pop_fr( );
}
while( back( ) <= i - k && isempty( ) == 0)
{
pop_bk( );
}
push_fr( i );
if( i >= k - 1 )
{
suma += 1LL * a[ back( ) ];
}
}
fout = fopen( "deque.out", "w" );
fprintf( fout, "%lld", suma );
fclose( fout );
return 0;
}