Cod sursa(job #2033661)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 7 octombrie 2017 09:44:52
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <deque>

using namespace std;

int n, k;
int sir[5000005];

void solve(){
    scanf("%d %d", &n, &k);

    long long sol = 0;

    for(int i = 0; i < n; i++){
        scanf("%d", &sir[i]);
    }

    deque<int> dq;

    for(int i = 0; i < k; i++){
        while(dq.size() > 0 && sir[dq.back()] > sir[i]){
            dq.pop_back();
        }
        dq.push_back(i);
    }

    sol += sir[dq.front()];

    for(int i = k; i < n; i++){
        while(dq.front() < i - k + 1){
            dq.pop_front();
        }

        while(dq.size() > 0 && sir[dq.back()] > sir[i]){
            dq.pop_back();
        }

        dq.push_back(i);

        sol += sir[dq.front()];
    }

    printf("%lld", sol);
}

int main() {
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    solve();

    return 0;
}