Pagini recente » Cod sursa (job #2167670) | Cod sursa (job #400552) | Cod sursa (job #2588482) | Cod sursa (job #277099) | Cod sursa (job #3297391)
#include <stdio.h>
#include <deque>
#include <queue>
#include <algorithm>
struct Mata {
std::deque<int> mata;
std::queue<int> tactu;
void push( int x ) {
tactu.push( x );
while( !mata.empty() && mata.back() > x )
mata.pop_back();
mata.push_back( x );
}
void pop() {
int x = tactu.front();
tactu.pop();
if( mata.front() == x )
mata.pop_front();
}
int getmin() const { return mata.front(); }
};
int main() {
FILE *fin = fopen( "deque.in", "r" );
FILE *fout = fopen( "deque.out", "w" );
int n, k;
fscanf( fin, "%d%d", &n, &k );
Mata zile;
for( int i = 0; i < k - 1; i++ ){
int x;
fscanf( fin, "%d", &x );
zile.push( x );
}
long long ret = 0;
for( int i = k - 1; i < n; i++ ){
int x;
fscanf( fin, "%d", &x );
zile.push( x );
ret += zile.getmin();
zile.pop();
}
fprintf( fout, "%lld\n", ret );
fclose( fin );
fclose( fout );
return 0;
}