Pagini recente » Cod sursa (job #2184030) | Cod sursa (job #679093) | Cod sursa (job #2901131) | Cod sursa (job #1378974) | Cod sursa (job #2798942)
#include <algorithm>
#include <stdio.h>
#include <deque>
int type[ 100 ];
int readInt( FILE *fin ) {
int rez = 0, ch;
while( !type[ ( ch = fgetc( fin ) ) ] );
int semn = 1;
if( ch == '-' ) {
semn = -1;
ch = fgetc( fin );
}
do
rez = rez * 10 + ch - '0';
while( type[ ( ch = fgetc( fin ) ) ] );
return rez * semn;
}
std::deque<std::pair<int, int> > q;
int main()
{
type[ '-' ] = type[ '0' ] = type[ '1' ] = type[ '2' ] = type[ '3' ] = type[ '4' ] = 1;
type[ '5' ] = type[ '6' ] = type[ '7' ] = type[ '8' ] = type[ '9' ] = 1;
FILE *fin = fopen( "deque.in", "r" );
int left = 0, x;
int n = readInt( fin );
int k = readInt( fin );
for( int i = 0; i < k; i++ ) {
x = readInt( fin );
while( !q.empty() && q.back().first >= x )
q.pop_back();
q.push_back( { x, i } );
}
long long sum = q.front().first;
for( int i = k; i < n; i++ ) {
if( q.front().second == i - k )
q.pop_front();
x = readInt( fin );
while( !q.empty() && q.back().first >= x )
q.pop_back();
q.push_back( { x, i } );
sum += q.front().first;
}
FILE *fout = fopen( "deque.out", "w" );
fprintf( fout, "%lld\n", sum );
fclose( fout );
return 0;
}