Cod sursa(job #535447)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 17 februarie 2011 11:12:57
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<algorithm>
using namespace std;
#include<vector>

#define DIM 5000005
#define DIMP 1000

int d[DIM];
int a[DIM],n,k,poz,st,dr;
long long sol;
char buff[DIMP];

inline void pars (int &nr)
{
    nr=0;
    bool neg=0;

    while((buff[poz]<'0' || buff[poz]>'9') && buff[poz]!='-')
        if(++poz==DIMP)
            fread(buff,1,DIMP,stdin),poz=0;

    while((buff[poz]>='0' && buff[poz]<='9') || buff[poz]=='-')
    {
        if(buff[poz]=='-')
            neg=1;
        else
            nr=nr*10+buff[poz]-'0';
        if(++poz==DIMP)
            fread(buff,1,DIMP,stdin),poz=0;
    }
    if(neg==1)
        nr=-nr;
}

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

    pars (n);
    pars (k);
	st=1;
	dr=0;
    for(i=1;i<=n;++i)
    {
        pars (a[i]);
        while(st<=dr && a[i]<=a[d[dr]])
            --dr;
        d[++dr]=i;

		while(st<=dr && d[st]<=i-k)
            ++st;
        
        if(i>=k)
            sol+=a[d[st]];
    }
    printf("%lld",sol);
    return 0;
}