Cod sursa(job #2038194)

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

using namespace std;

deque<int>D;
int a[X],n,k;
long long s;

int main()
{
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);

    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();

        }
         D.push_back(i);
        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




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


    }
printf("%lld ",s);




    return 0;
}