Cod sursa(job #1603735)

Utilizator antanaAntonia Boca antana Data 17 februarie 2016 19:06:33
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include<deque>
#define MAX 5000000
using namespace std;
deque<int>d1, d2;
int main()
{
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    int n, i, k, x;
    long long s=0;
    scanf("%d%d", &n, &k);
    for(i=1;i<=k;i++)
    {
        scanf("%d", &x);
        while(!(d1.empty())&&d1.back()>x)
        {
            d1.pop_back();
            d2.pop_back();
        }
        d1.push_back(x);
        d2.push_back(i);
    }
    s+=d1.front();
    for(i=k+1;i<=n;i++)
    {
        scanf("%d", &x);
        if(!d1.empty())
            if(d2.front()<=i-k)
            {
                d2.pop_front();
                d1.pop_front();
            }
        while(!(d1.empty())&&d1.back()>x)
        {
            d1.pop_back();
            d2.pop_back();
        }
        d1.push_back(x);
        d2.push_back(i);
        s+=d1.front();
    }
    printf("%lld", s);
    return 0;
}