Cod sursa(job #1815813)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 25 noiembrie 2016 19:58:54
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>

#define minim(a,b) ((a < b) ? a : b)
#define maxn 5000010

using namespace std;

int n,k;
int a[maxn],deque[maxn];
int front,back;

long long sum;

int main()
{
    int a1;
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);
    scanf("%i %i",&n,&k);
    for(int i=1;i<=n;i++)
        scanf("%i",&a[i]);
    front = 1,back = 0;
    for(int i=1;i<=n;i++)
    {
        while(front <= back && a[i] <= a[deque[back]])
            back--;
        deque[++back] = i;
        if(deque[front] == i-k)
            front++;
        if(i >= k)
            sum+= a[deque[front]];
    }
    printf("%lld",sum);
    return 0;
}