Cod sursa(job #819014)

Utilizator unholyfrozenCostea Andrei unholyfrozen Data 18 noiembrie 2012 13:56:54
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>

using namespace std;

int main()
{
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);	
	
	int N, K, start_deq, end_deq;
	int* Array;
	int* Deque;
	long long sum = 0;
	
	scanf("%d %d", &N, &K;
	Array = new int[N];
	Deque = new int[N];
	start_deq = 0, end_deq = -1;

	for (int i = 0; i < N; i++)
		scanf("%d ", &Array[i]);
	
	for (int i = 0; i < N; i++) {
		/* verify if top of deque is outside the range */
		if (start_deq <= end_deq && Deque[start_deq] <= i - K)
			start_deq++;
		
		/* insert current element into deque */
		while (end_deq >= start_deq && Array[Deque[end_deq]] > Array[i])
			end_deq--;
		Deque[++end_deq] = i;		
	
		if (i + 1 >= K)
			sum += Array[Deque[start_deq]];
	}

	printf("%lld\n", sum);
	return 0;
}