Cod sursa(job #778068)

Utilizator tm_raduToma Radu tm_radu Data 13 august 2012 21:11:53
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#define NMAX 1000000

int n, i, j, k;
int deqVal[NMAX], deqPos[NMAX];
long long int result = 0;
int p, q;

void Enqueue(int val, int pos);
int GetMinVal();
int GetMinPos();
void Dequeue();

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

	scanf("%d %d\n", &n, &k);
	p = 0; q = -1;

	for (i = 0; i < k; i++)
	{
		scanf("%d", &j);
		Enqueue(j, i);
	}
	result = GetMinVal();

	for (i = k; i < n; i++)
	{
		scanf("%d", &j);
		Enqueue(j, i);

		if (GetMinPos() < i-k+1)
			Dequeue();

		result += GetMinVal();
	}

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

void Enqueue(int val, int pos)
{
	q++;
	while (p < q && val <= deqVal[q-1])
	{
		q--;
	}
	deqVal[q] = val;
	deqPos[q] = pos;
}

void Dequeue()
{
	p++;
}

int GetMinVal()
{
	return deqVal[p];
}

int GetMinPos()
{
	return deqPos[p];
}