Cod sursa(job #1364218)
| Utilizator | Data | 27 februarie 2015 15:51:02 | |
|---|---|---|---|
| Problema | Deque | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.58 kb |
#include <cstdio>
#include <deque>
using namespace std;
#define Nmax 5000002
FILE *f = fopen ( "deque.in", "r" );
FILE *g = fopen ( "deque.out", "w" );
deque < int > Q;
int v[Nmax];
int main(){
int N, K;
long long s = 0;
fscanf ( f,"%d%d", &N ,&K );
for ( int i = 1 ; i <= N; ++i ){
fscanf ( f, "%d", &v[i] );
while ( !Q.empty() && v[i] <= v[Q.back()] )
Q.pop_back();
Q.push_back ( i );
if ( Q.front() <= i - K )
Q.pop_front();
if ( i >= K )
s += v[Q.front()];
}
fprintf ( g, "%lld", s );
return 0;
}
