Pagini recente » Cod sursa (job #989430) | Cod sursa (job #1763062) | Cod sursa (job #2273258) | Cod sursa (job #192687) | Cod sursa (job #1464110)
#include <cstdio>
#include <deque>
using namespace std;
const int MAX = 5000010;
const int MAXC = 100010;
long long a[MAX];
long long N, K;
long long S;
char c[MAXC];
long long p = MAXC - 1;
long long x;
deque<long long> Q;
void Read();
void Get( long long& x );
void Next();
int main()
{
freopen( "deque.in", "r", stdin );
freopen( "deque.out", "w", stdout );
int i, j;
Read();
for ( i = 1; i <= K - 1; i++ )
{
while ( !Q.empty() && a[i] < a[Q.back()] )
Q.pop_back();
Q.push_back(i);
}
for ( i = K; i <= N; i++ )
{
while ( !Q.empty() && Q.front() <= i - K )
Q.pop_front();
while ( !Q.empty() && a[i] < a[Q.back()] )
Q.pop_back();
Q.push_back(i);
S += a[Q.front()];
}
printf( "%lld\n", S );
fclose(stdin);
fclose(stdout);
return 0;
}
void Read()
{
int i;
scanf( "%lld%lld", &N, &K );
for ( i = 1; i <= N; i++ )
{
scanf( "%lld", &a[i] );
}
}
void Get( long long& x )
{
bool sgn = 0;
for ( ; c[p] < '0' || c[p] > '9'; Next() )
if ( c[p] == '-' )
sgn = 1;
for ( x = 0; c[p] >= '0' && c[p] <= '9'; Next() )
x = x * 10 + ( c[p] - '0' );
if ( sgn )
x = -x;
}
void Next()
{
if ( ++p == MAXC )
{
std::fread( c, 1, MAXC, stdin );
p = 0;
}
}