Cod sursa(job #367642)
| Utilizator | Data | 22 noiembrie 2009 23:42:22 | |
|---|---|---|---|
| Problema | Deque | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.55 kb |
#include<stdio.h>
#define Nmax 5000020
long long S;
int D[Nmax], V[Nmax];
int i, p, u, k, n;
FILE * f = fopen ("deque.in", "r");
FILE * g = fopen ("deque.out", "w");
int main () {
fscanf(f, "%d %d", &n, &k);
for (i = 1 ; i <= n ; i++)
fscanf (f, "%d", &V[i]);
for (i = 1 ; i <= n ; i++) {
while ( p <= u && V[i] <= V[D[u]] )
u--;
D[++u] = i;
if (D[p] == i-k) {
D[p] = 0;
p++;
}
if (i >= k)
S += V[D[p]];
}
fprintf (g, "%lld", S);
fclose(f);
fclose(g);
return 0;
}