Cod sursa(job #1425139)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 26 aprilie 2015 19:58:41
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <deque>

using namespace std;

#define inFile "deque.in"
#define outFile "deque.out"
#define MAX_N 5000000

FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");

int A[MAX_N + 1];
deque < int > DQ;

int main() {
    int N, i, K;
    long long Sum = 0;
    
    fscanf(in, "%d %d", &N, &K);
    for(i = 1; i <= K; i++) {
        fscanf(in, "%d", &A[i]);
        while(!DQ.empty() && A[DQ.back()] >= A[i]) DQ.pop_back();
        DQ.push_back(i);
    }
    Sum += A[DQ.front()];
    
    for(i = K+1; i <= N; i++) {
        fscanf(in, "%d", &A[i]);
        if(DQ.front() < i-K+1) DQ.pop_front();
        while(!DQ.empty() && A[DQ.back()] >= A[i]) DQ.pop_back();
        DQ.push_back(i);
        Sum += A[DQ.front()];
    }
    
    fprintf(out, "%lld\n", Sum);
    
    fclose(in);
    fclose(out);
    
    return 0;
}