Cod sursa(job #1806753)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 15 noiembrie 2016 17:52:00
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <cstdio>
#include <deque>

using namespace std;

int n, k;
long long s;
int a[5000005];
deque <int> q;

void citire()
{
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; ++i)
        scanf("%d", &a[i]);
}

void rezolvare()
{

    for(int i=1; i<=k-1; ++i)
    {
        while(!q.empty() && a[i]<a[q.back()] )
            q.pop_back();
        q.push_back(i);
    }
    for(int i=k; i<=n; ++i)
    {
        while(!q.empty() && a[i]<a[q.back()])
            q.pop_back();
        q.push_back(i);
        if(q.back()-q.front()>k-1)
            {
                q.pop_front();
            }
        s+=1LL*a[q.front()];
    }
}

int main()
{
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    citire();
    rezolvare();
    printf("%lld", s);
    return 0;
}