Cod sursa(job #1478302)

Utilizator SilviuIIon Silviu SilviuI Data 28 august 2015 13:22:06
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define nmax 5000010
#define buffersize 32768
using namespace std;
int n,k,i,j,t[nmax],pr,ul,udeque[nmax],l=0;
long long sol=0;
char buffer[buffersize+5];
bool ok=true;
void read(int &x)
{
    int b;
    if (ok) {
        ok=false; fread(buffer,1,buffersize,stdin); l=0;
    }
    while ((buffer[l]<'0' || buffer[l]>'9') && buffer[l]!='-') {
        l++;
        if (l==buffersize) {
            l=0; fread(buffer,1,buffersize,stdin);
        }
    }
    if (buffer[l]=='-') b=-1,l++; else b=1; x=0;
    if (l==buffersize) {
        l=0; fread(buffer,1,buffersize,stdin);
    }
    while (buffer[l]>='0' && buffer[l]<='9') {
        x=x*10+buffer[l]-48; l++;
        if (l==buffersize) {
            l=0; fread(buffer,1,buffersize,stdin);
        }
    }
    x=x*b;
}
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;
for (i=1;i<=n;i++) {
    while (pr<=ul && t[udeque[ul]]>=t[i]) ul--;
    ul++; udeque[ul]=i;
    if (i-udeque[pr]==k) pr++;
    if (i>=k) sol=sol+t[udeque[pr]];
}
printf("%lld",sol);
return 0;
}