Cod sursa(job #2842366)

Utilizator StefanL2005Stefan Leustean StefanL2005 Data 31 ianuarie 2022 17:52:58
Problema Deque Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <vector>
#include <deque>
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");

int main()
{
    long long n, k, sum = 0, nr = 0;
    in>> n >> k;

    vector<long long> v(n);
    for (int i = 0; i < n; i++)
        in>> v[i];

    deque<long long> dQ;
    dQ.push_front(v[0]);
    nr++;
    if (nr == k)
    {
        sum += dQ.back();
        if (k == 1)
            dQ.pop_back();
        nr--;
    }

    for (int i = 1; i < n; i++)
    {
        nr++;

        if (dQ.empty() || v[i] > dQ.front())
            dQ.push_front(v[i]);
        else
        {
            while (not dQ.empty() && v[i] <= dQ.front())
            {
                dQ.pop_front();
            }

            dQ.push_front(v[i]);
        }


        if (nr == k)
        {
            sum += dQ.back();
            if (dQ.back() == v[i - k + 1])
                dQ.pop_back();
            nr--;
        }
    }
    out<< sum;


    in.close();
    out.close();
    return 0;
}