Cod sursa(job #1260543)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 11 noiembrie 2014 13:24:51
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <iostream>
#include <vector>


long long getSum(const std::vector<int> &v, int K)
{
    std::vector<int> deque(v.size());

    long long sum = 0;
    int front = 0, back = -1;

    for (int i = 0; static_cast<std::size_t>(i) < v.size(); ++i) {
        while (front <= back && v[deque[back]] >= v[i])
            --back;
        deque[++back] = i;

        if (deque[front] == i - K)
            ++front;

        if (i >= K - 1)
            sum += static_cast<long long>(v[deque[front]]);
    }

    return sum;
}

int main()
{
    std::ifstream fin("deque.in");
    std::ofstream fout("deque.out");

    int N, K;
    fin >> N >> K;

    std::vector<int> v(N);
    for (auto &i : v)
        fin >> i;

    fout << getSum(v, K);

    return 0;
}