Cod sursa(job #2260476)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 15 octombrie 2018 00:36:17
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>
#include<deque>

using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");

int n,k,i,v[5000001];
long long suma;

int main()
{
    f>>n>>k;
    deque<int>coada;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        //atata timp cat coada mea nu este goala si urmatorul element citit este mai mic decat ultimul element din coada in partea dreapta
        while(!coada.empty()&&v[i]<v[coada.back()])
            //scadem pozitiile
            coada.pop_back();
        //introduc in partea drepat pozitia i
        coada.push_back(i);
        //daca pozitia din dreapta a cozii este egala cu diferenta de indicele i pe care ne aflam si numarul k de elemente intr- o secventa
        if(coada.front()==i-k)
            //atunci scadem din indicii din partea dreapta
            coada.pop_front();
        //daca indicele pe care ma aflu, i, este mai mare sau egal decat nr de elemente dintr-o secventa
        if(i>=k)
            //adaug la suma deja existenta elementul care se afla pe pozitia cea mai din stanga
            suma=suma+v[coada.front()];
    }
    g<<suma;
    return 0;
}