Pagini recente » Cod sursa (job #197109) | Cod sursa (job #13342) | Cod sursa (job #898987) | Cod sursa (job #899245) | Cod sursa (job #2943924)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f( "deque.in" );
ofstream g( "deque.out" );
const int dim = 5*1e5 + 5;
int v[ dim ], coada[ dim ];
int main()
{
int n, lung_fereastra, i, st = 1, dr = 0, S = 0;
f >> n >> lung_fereastra;
for( i = 1; i <= n; ++i )
f >> v[ i ];
for ( i = 1; i <= n; ++i )
{
while ( st <= dr && v[ i ] <= v[ coada[dr] ] )
--dr;
coada[ ++dr ] = i;
if( coada[ st ] == i - lung_fereastra )
++st;
/// DAca, chiar si dupa ce am eliminat capatul din st, pozitia elem e mai mare decat k, lungimea ferestrei, inseamna ca pot pune elementul in suma.
/// Nu scot direct, mai pot fi si altele!
if ( i >= lung_fereastra )
S += v[ coada[st] ];
}
g << S;
return 0;
}