Pagini recente » Cod sursa (job #3037847) | Cod sursa (job #1076965) | Cod sursa (job #1953089) | Cod sursa (job #1528263) | Cod sursa (job #2677569)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5000000
#define QMAX NMAX
//nu am facut circular pt ca k <= n
int v[NMAX];
int c[QMAX];
int prim, ultim;
static inline void pop() {
ultim = ultim - 1;
}
static inline void enque( int e ) {
c[ultim] = e;
ultim = ultim + 1;
}
static inline void deque() {
prim = prim + 1;
}
static inline int emptyque() {
return prim == ultim;
}
int main() {
FILE *fin, *fout;
int n, k, i;
long long s;
fin = fopen( "deque.in", "r" );
fscanf( fin, "%d%d", &n, &k );
for( i = 0; i < k; i++ ) {
fscanf( fin, "%d", &v[i] );
while( !emptyque() && v[i] < v[c[ultim-1]] )
pop();
enque( i );
}
s = v[c[prim]];
for( i = 0; i < n - k; i++ ) {
fscanf( fin, "%d", &v[i+k] );
if( i == c[prim] )
deque();
while( !emptyque() && v[i+k] < v[c[ultim-1]] )
pop();
enque( i + k );
s += v[c[prim]];
}
fclose( fin );
fout = fopen( "deque.out", "w" );
fprintf( fout, "%lld", s );
fclose( fout );
return 0;
}