Mai intai trebuie sa te autentifici.
Cod sursa(job #235570)
Utilizator | Data | 24 decembrie 2008 14:50:33 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.66 kb |
#include <cstdio>
const int maxn = 5000001;
FILE *in = fopen("deque.in","r"), *out = fopen("deque.out","w");
int n, k;
int a[maxn];
int deque[maxn], st = 1, dr = 0;
void read()
{
fscanf(in, "%d %d", &n, &k);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &a[i]);
}
int main()
{
read();
long long s = 0;
for ( int i = 1; i <= n; ++i )
{
while ( st <= dr && a[ deque[dr] ] >= a[i] )
--dr;
deque[++dr] = i;
if ( deque[st] == i - k )
++st;
if ( i >= k )
s += a[ deque[st] ];
}
fprintf(out, "%lld\n", s);
return 0;
}