Cod sursa(job #2038189)

Utilizator GrasuneAlexandruGrasune Alexandru Mihai GrasuneAlexandru Data 13 octombrie 2017 14:38:14
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <cstdio>
#include <deque>
#define X 5000005

using namespace std;

int main()
{
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);
    deque<int>D;
    int a[X],n,k;
    long long s=0;
    scanf("%d %d\n",&n,&k);
    for(int i=0; i<n; i++)
        scanf("%d\n",&a[i]);

    for(int i=0; i<k-1; i++)
    {
        while(!D.empty()&&a[i]<a[D.back()])
            D.pop_back();
        D.push_back(i);

    }
    ///daca elementul pe care vrei sa il pui e mai mic decat ultimul
    ///element ce il ai in coada stergi ultimul el si il bagi pe ala nou
    ///altfel doar pui acolo
    //ramai cu cel mai mic element pe primul loc

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

        while(!D.empty()&&a[i]<a[D.back()])
        {
            D.pop_back();

        }
        if(i-k==D.front())
            D.pop_front();
            ///in caz de el pe care vrei sa il pui e deja in coada si e minim
            ///scapi de primul el


        D.push_back(i);

        s=s+a[D.front()];


    }
printf("%lld ",s);




    return 0;
}