Cod sursa(job #674097)

Utilizator damgoodLincan Dan damgood Data 5 februarie 2012 15:48:36
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <cstdio>
#define MAXN 5000001

int deque[MAXN], a[MAXN];
int front = 1, back = 0;
int n, k;
long long sum;

void read()
{
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);

	scanf("%d %d ", &n, &k);
	for(int i = 1; i <= n; ++i)
		scanf("%d ", a + i);
}

void solve()
{
	for(int i = 1; i <= n; ++i)
	{
		while( front <= back && a[i] <= a[ deque[ back ] ] ) --back;
		deque[ ++back ] = i;
		if( deque[ front ] == i - k ) ++front;
		if( i >= k ) sum += a[ deque[ front ] ];
	}
}

void printResult()
{
	printf("%lld\n", sum);
}

int main()
{			
	read();
	solve();
	printResult();
	return 0;
}