Cod sursa(job #1428000)

Utilizator ButnaruButnaru George Butnaru Data 3 mai 2015 15:04:54
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#define buffSize 32762
int pr,ul,i,ok=1,n,k,deque[5000000],t[5000000],ind;
long long s;
char buffer[buffSize];
void read(int &x)
{
    if(ok)
    {
        fread( buffer, 1, buffSize, stdin );
        ok = 0; ind = 0;
    }
    x = 0;
    if (buffer[ind]=='-') {
        ind++;
        x=-(buffer[ind]-'0'); ind++;
        if (ind==buffSize)
        {
            fread( buffer, 1, buffSize, stdin );
            ind = 0;
        }
    }
    while( buffer[ind]>='0' && buffer[ind]<='9' )
    {
        x = x*10 + (buffer[ind]-'0');
        ind++;
        if( ind==buffSize )
        {
            fread( buffer, 1, buffSize, stdin );
            ind = 0;
        }
    }
    while(( buffer[ind]<'0' || buffer[ind]>'9' ) && (buffer[ind]!='-'))
    {
        ind++;
        if( ind==buffSize )
        {
            fread( buffer, 1, buffSize, stdin );
            ind = 0;
        }
    }
}
int main(){
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
read(n); read(k);
for (i=1;i<=n;i++) read(t[i]);
pr=1; ul=0; s=0;
for (i=1;i<=n;i++) {
while (pr<=ul && t[deque[ul]]>=t[i]) ul--;
ul=ul+1; deque[ul]=i;
if (i-deque[pr]==k) pr++;
if (i>=k) s+=t[deque[pr]];
}
printf("%lld",s);
return 0;
}