Cod sursa(job #2620619)

Utilizator ADRIAN.CATRINOIUAdrian Catrinoiu ADRIAN.CATRINOIU Data 29 mai 2020 12:24:37
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
//folosim un vector drept coada in care vom retine minimul secventelor
int coada[500005],v[500005];

int main()
{
    int n, k,sum=0,st=0,dr=-1;
    fin>>n>>k;
     for(int i=0;i<n;i++)
        fin>>v[i];
    for(int i=0;i<n;i++)
    {
        //cat timp elementul curent e mai mic decat ultimul element din coada
        //eliminam elementele mai mari decat elementul curent
        //(elementul curent va deveni ultimul din coada)
        while(st<=dr && v[i]<v[coada[dr]])
            dr--;
        //introducem pozitia elementului curent in coada
        coada[++dr]=i;
        //daca elementul minim este pe pozitia i-k,luam urmatorul minim
        if(coada[st]==i-k)
            st++;
        //adunam minimul secventei(primul element din coada) la suma(incepand dupa ce am parcurs minim k elemente
        //(k-1 fiindca incepem de la 0)
        if(i>=k-1)
            sum+=v[coada[st]];
    }
    fout<<sum;
    return 0;
}