Cod sursa(job #1804038)
Utilizator | Data | 12 noiembrie 2016 10:15:15 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.63 kb |
#include <cstdio>
#define NMAX 5000010
#define FOR(i,a,b) for(int i = a; i<=b; i++)
int N, K, st, fi;
int a[NMAX], d[NMAX];
long long int rez;
FILE* fin = fopen("deque.in","r");
FILE* fout = fopen("deque.out","w");
int main()
{
fscanf(fin,"%d %d", &N, &K);
FOR(i,1,N)
fscanf(fin, "%d", &a[i]);
st = 1, fi = 0;
FOR(i,1,N)
{
while( st<=fi && a[i] <= a[d[fi]] )
{
fi--;
}
d[++fi] = i;
if(d[st] == i-K)
{
st++;
}
if(i >= K)
{
rez += a[d[st]];
}
}
fprintf(fout,"%lld\n", rez);
return 0;
}