Cod sursa(job #323609)

Utilizator stinkyStinky si Grasa stinky Data 12 iunie 2009 20:51:38
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<cstdio>
#include<deque>

using namespace std;

const int N=5000001;

int v[N],p=1,u=0,n,k;

deque<int> d;

inline void stanga(int i)
{
	if(d.front()+k==i)
		d.pop_front();
}

inline void dreapta(int i)
{
	while(!d.empty() && v[d.back()]>=v[i])
		d.pop_back();
}

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

void suma()
{
	int i;
	long long s;
	for(i=1;i<=k;++i)
	{
		dreapta(i);
		d.push_back(i);
	}
	s=v[d.front()];
	for(i=k+1;i<=n;++i)
	{
		dreapta(i);
		d.push_back(i);
		stanga(i);
		s+=(long long)v[d.front()];
	}
	printf("%lld\n",s);
}

int main()
{
	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);
	citire();
	suma();
	return 0;
}