Cod sursa(job #672564)

Utilizator lam99Tran Bach Lam lam99 Data 2 februarie 2012 16:19:24
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<stdio.h>
int n,m,k,i,j;
long long s;
struct dque
{
	int x,y;
};
dque q[5000001];
int b[5000001];
void deque()
{
	int i,min,u=0,p=1;
	for(i=1;i<=n;i++)
	{
		if(b[i]>q[u].x)
		{
			q[++u].x=b[i];
			q[u].y=i;
		}
		else
		{
			while(b[i]<=q[u].x&&u>=1)
			{
				q[u].x=0;
				q[u].y=0;
				u--;
			}
			q[++u].x=b[i];
			q[u].y=i;
		}
		if(q[u].y-q[p].y>=k)
			p++;
		min=q[p].x;
		if(i>=k)
			s+=min;
	}
}
int main()
{
	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
		scanf("%d",&b[i]);
	deque();
	printf("%lld\n",s);
	return 0;
}