Cod sursa(job #621954)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 16 octombrie 2011 23:25:36
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <deque>

deque <int> d;
int a[5000005], n, k;
long long s;

using namespace std;

int main ()
{
	freopen ("deque.in", "r", stdin);
	scanf("%d%d", &n, &k);
	int i;
	for(i=1; i<=n; i++)
		scanf("%d", &a[i]);
	
	for (i=1; i<=n; i++)
	{
		while (!d.empty() && a[i] <= a[d.back()]) // scot elementele care sunt mai mici sau egale cu a[i]
			d.pop_back();
		
		d.push_back(i); // pun pozitia in deque
		if (d.front() == i-k) // elimin primul element din deque pentru ca nu mai apartine unei secvente de lungime k
			d.pop_front();
		
		if (i>=k) // adaug la suma daca am o secventa de lungime cel putin k
			s += a[d.front()];		
	}
	
	freopen ("deque.out", "w", stdout);
	printf	("%lld\n", s);	
	return 0;
}