Cod sursa(job #1919949)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 9 martie 2017 21:43:27
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <cstdio>
#include <deque>

using namespace std;

int n, k;
int numere[5000005];
deque<int> Q;

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

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

void solve(){
    long long sum = 0;

    for(int i = 0; i < k - 1; i++)
    {
        while(!Q.empty() && numere[Q.back()] > numere[i])
        {
            Q.pop_back();
        }

        Q.push_back(i);
    }

    for(int i = k - 1; i < n; i++)
    {
        int tmp = numere[i];

        while(!Q.empty() && numere[Q.back()] > numere[i])
        {
            Q.pop_back();
        }

        Q.push_back(i);

        if(i - Q.front() >= k)
        {
            Q.pop_front();
        }

        sum += numere[Q.front()] * 1LL;
    }

    printf("%lld", sum);
}

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

    citire();
    solve();

    return 0;
}