Cod sursa(job #248529)

Utilizator vlad.maneaVlad Manea vlad.manea Data 25 ianuarie 2009 23:38:44
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <stdio.h>
#define nmax 5000005

int stack[nmax], posit[nmax];
int i, N, K, N1, N2, e;
long long sum;

int main()
{
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);

	scanf("%d%d", &N, &K);

	for (N1 = 0, N2 = -1, i = 1; i <= N; ++i)
	{
		scanf("%d", &e);
		
		++N2;
		stack[N2] = e;
		posit[N2] = i;

		while (stack[N2] < stack[N2-1] && N2-1 >= N1)
		{
			N2--;
			stack[N2] = stack[N2+1];
			posit[N2] = posit[N2+1];
		}

		while (posit[N1] <= i-K)
			N1++;

		if (i >= K)
			sum += stack[N1];
	}

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