Cod sursa(job #236250)
Utilizator | Data | 26 decembrie 2008 23:58:21 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.58 kb |
#include<stdio.h>
int a[5000002];
int dq[5000002];
int st;
int n;
long long sum;
int k;
int fin;
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
st = 1;
fin = 1;
scanf("%d %d",&n,&k);
for(int i = 1; i <= n; i++)
scanf("%d",&a[i]);
dq[1] = a[1];
for(int i = 2; i <= n; i++)
{
while (a[i] < dq[fin] && fin >= st)
fin--;
dq[++fin] = a[i];
if (i > k && dq[st] == a[i-k]) st++;
if (i >= k) sum += dq[st];
}
printf("%lld",sum);
return 0;
}