Cod sursa(job #255737)
| Utilizator | Data | 10 februarie 2009 15:43:38 | |
|---|---|---|---|
| Problema | Deque | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.65 kb |
#include <stdio.h>
#define NMAX 5000001
int N, K, x[NMAX], poz[NMAX];
long long sum;
int main()
{
int i, beg, end;
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d %d", &N, &K);
for ( i = 1; i <= N; i++)
scanf("%d", &x[i]);
beg = end = 1;
poz[1] = 1;
for ( i = 2; i <= N; i++)
{
if ( poz[beg] + K <= i)
beg++;
for (; x[i] < x[poz[end]] && beg <= end; --end);
poz[++end] = i;
if ( i >= K)
sum += x[poz[beg]];
}
printf("%lld\n", sum);
return 0;
}
