Cod sursa(job #258109)

Utilizator drag0s93Mandu Dragos drag0s93 Data 14 februarie 2009 18:39:38
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<stdio.h>

#define A 5000020

#define N 5000020

int v[N],deq[A],k,n,u,p;
long long s;

void dreapta(int i)
{
	while(u!=p && v[deq[u-1]]>=v[i])
		--u;
	deq[u++]=i;
}
void stanga(int i)
{
	if(i-deq[p]>=k)
		++p;
}
void solve()
{
	for(int i=k+1;i<=n;++i)
	{
		stanga(i);
		dreapta(i);
		s+=v[deq[p]];
	}
}
int main()
{
	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
	deq[u++]=1;
	for(int i=2;i<=k;++i)
		dreapta(i);
	s=v[deq[p]];
	solve();
	printf("%lld",s);
	return 0;
}