Cod sursa(job #1725302)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 5 iulie 2016 13:22:51
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#include <algorithm>
#define MAX 56000000
using namespace std;
char f[MAX];
int pos=0,N,K,X,Deque[5000005],v[5000005],Front=1,Back=0,DequeSize=0;
long long S;
void r(int &nr)
{
    int sign=0;
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
    {
        pos++;
        if(f[pos]=='-')
            sign=1;
    }
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
    if(sign==1)
        nr=-nr;
}
int DequeFront()
{
    return Deque[Front];
}
int DequeBack()
{
    return Deque[Back];
}
void AddToBack(int val)
{
    Deque[++Back]=val;
    DequeSize++;
}
void RemoveFromBack()
{
    Back--;
    DequeSize--;
}
void RemoveFromFront()
{
    Front++;
    DequeSize--;
}
int main()
{
    freopen("test.in","r",stdin);
    freopen("test.out","w",stdout);
    //fread(f,1,MAX,stdin);
    scanf("%d%d",&N,&K);
    for(int i=1;i<=N;i++)
    {
		scanf("%d",&v[i]);
        while(DequeSize>0&&v[DequeBack()]>=v[i]) RemoveFromBack();
        AddToBack(i);
        if(DequeFront()==i-K)
            RemoveFromFront();
        if(i>=K)S+=v[DequeFront()];
    }
    printf("%lld",S);
    return 0;
}