Cod sursa(job #604588)

Utilizator sergiupPopescu Sergiu sergiup Data 23 iulie 2011 15:53:20
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <deque>

using namespace std;

deque<int> q;
int sir[5000005];

int main()
{
	int n,k;

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

	scanf("%d%d",&n,&k);

	for (int i = 0 ; i < n ; ++i)
	{
		scanf("%d",&sir[i]);
	}

	for (int i = 0 ; i < k ; ++i)
	{
		while (!q.empty() && sir[i] < sir[q.front()])
		{
			q.pop_front();
		}
		q.push_front(i);
	}

	long long int sum = sir[q.back()];

	for (int i = k ; i < n ; ++i)
	{
		while (!q.empty() && sir[i] < sir[q.front()])
		{
			q.pop_front();
		}
		q.push_front(i);
		while (q.back() <= i - k)
		{
			q.pop_back();
		}
		sum += sir[q.back()];
	}

	printf("%lld\n",sum);

	return 0;
}