Cod sursa(job #2127590)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 10 februarie 2018 20:13:45
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <deque>
#include <iostream>

using namespace std;

#define NMAX 5000002

long long sir[NMAX], minim[NMAX];
deque<int> pos;

int n, k;

void calc_min(){
    int len = 0;
    pos.push_back(1);
    minim[1] = sir[1];
    for(int i = 1; i <= n; ++i){
        while(sir[pos[len]] > sir[i] && i - pos[len] <= k - 1){
            minim[pos[len]] = sir[i];
            pos.pop_back();
            len--;
        }
        if(sir[i - 2] != 0 && sir[i - 1] != 0 && sir[i + 1] != 0 && sir[i + 2] != 0 && minim[i] == 0)
            minim[i] = sir[i];
        pos.push_back(i);
        len++;
    }
}

int main()
{
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    scanf("%d%d", &n, &k);
    for(int i = 1; i <= n; ++i)
        scanf("%lld", &sir[i]);
    calc_min();
    long long sum = 0LL;
    for(int i = 1; i <= n - k + 1; ++i)
        sum += minim[i];
    printf("%lld", sum);
    return 0;
}