Pagini recente » Cod sursa (job #567638) | Cod sursa (job #3270188) | Cod sursa (job #1275581) | Cod sursa (job #3041887) | Cod sursa (job #3325309)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5000000
int vec[NMAX + 1], deque[NMAX + 1];
int first, size;
int push_back( int val ) {
if ( size == NMAX )
return 0;
deque[(first + size) % NMAX] = val;
size++;
return 1;
}
int pop_front() {
if ( size == 0 )
return 0;
first++;
if ( first == NMAX )
first = 0;
size--;
return 1;
}
int pop_back() {
if ( size == 0 )
return 0;
size--;
return 1;
}
int front() {
if ( size > 0 )
return deque[first];
return -1;
}
int back() {
if ( size > 0 )
return deque[(first + size - 1) % NMAX];
return -1;
}
int main()
{
FILE *fin, *fout;
long long sum;
int num_n, num_k, ind;
fin = fopen( "deque.in", "r" );
fscanf( fin, "%d%d", &num_n, &num_k );
sum = 0;
for ( ind = 1; ind <= num_n; ind++ ) {
fscanf( fin, "%d", &vec[ind] );
while ( size > 0 && vec[back()] >= vec[ind] )
pop_back();
push_back( ind );
if ( front() <= ind - num_k )
pop_front();
if ( ind >= num_k )
sum = sum + vec[front()];
}
fclose( fin );
fout = fopen( "deque.out", "w" );
fprintf( fout, "%lld\n", sum );
fclose( fout );
return 0;
}