Cod sursa(job #293474)

Utilizator mottyMatei-Dan Epure motty Data 1 aprilie 2009 20:56:12
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<cstdio>
#include<vector>
#include<deque>
#define N 5000010
using namespace std;

int n,k,front,back,v[N],q[N],sum;

void read()
{
	scanf("%d%d",&n,&k);
	for( int i=1 ; i<=n ; ++i )
	{
		scanf("%d",&v[i]);
	}
}

void dreapta(int i)
{
	while( front<=back && v[i]<=v[q[back]])
		back--;
}

void stanga(int i)
{
	if(q[front]==i-k)
		++front;
}

void solve()
{
	front=1;
	back=0;
	for( int i=1 ; i<=n ; ++i )
	{
		dreapta(i);
		q[++back]=i;
		stanga(i);
		if(i>=k)
			sum+=v[q[front]];
	}
	printf("%d",sum);
}


int main()
{
	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);
	read();
	solve();
	printf("%lld",sum);
	return 0;
}