Pagini recente » Cod sursa (job #2732881) | Cod sursa (job #1942535) | Cod sursa (job #3145696) | Cod sursa (job #2082825) | Cod sursa (job #2622802)
#include <stdio.h>
#define MAX 5000000 //2^23
int v[MAX], deq[MAX];
int b, e;
void popBack() {
e = (e - 1 + MAX) % MAX;
}
void popFront() {
b = (b + 1) % MAX;
}
void pushBack( int val ) {
deq[e] = val;
e = (e + 1) % MAX;
}
int qempty() {
return b == e;
}
void update( int val ) {
while ( !qempty() && deq[e - 1] > val ) {
popBack();
}
}
int main() {
FILE *fin = fopen( "deque.in", "r" );
FILE *fout = fopen( "deque.out", "w" );
int n, k, i;
long long sum;
fscanf( fin, "%d%d", &n, &k );
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &v[i] );
}
pushBack( v[0] );
for ( i = 1; i < k; ++i ) {
update( v[i] );
pushBack( v[i] );
}
sum = deq[b];
for ( i = 1; i <= n - k; ++i ) {
update( v[i + k - 1] );
pushBack( v[i + k - 1] );
if ( deq[b] == v[i - 1] ) {
popFront();
}
sum += deq[b];
}
fprintf( fout, "%lld", sum );
fclose( fin );
fclose( fout );
}