Cod sursa(job #621961)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 16 octombrie 2011 23:30:55
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <fstream>
#include <deque>

using namespace std;

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

int main ()
{
/*	freopen ("deque.in", "r", stdin);
	scanf("%d%d", &n, &k);
	int i;
	for(i=1; i<=n; i++)
		scanf("%d", &a[i]);
	*/
	
	ifstream f("deque.in");
	f>>n>>k;
	int i;
	for (i=1; i<=n; i++)
		f>>a[i];
	f.close();
	
	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;
}