Cod sursa(job #247660)

Utilizator SheepBOYFelix Liviu SheepBOY Data 23 ianuarie 2009 17:52:27
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
#pragma pack(push,1)
int sp,n,k,lim,dq[5000005],pos[5000005];
long long sum;
void pop_first()
{
	/*for(int i=1;i<=lim;++i)
	{
		dq[i]=dq[i+1];
		pos[i]=pos[i+1];
	}
	--lim;*/
}
int add_to_dq(int aux,int poz)
{
	int i=lim;
	if(lim)
	while(aux<dq[i]&&i>=sp)
		--i;

	
	++i;
	lim=i;
	dq[i]=aux;
	pos[i]=poz;
}
int main()
{
	int aux,nr=0;
	freopen("deque.in","rb",stdin);
	freopen("deque.out","w",stdout);
	scanf("%d%d",&n,&k);
	sp=1;
	for(int i=1;i<=n+1;++i)
	{
		if(i-pos[sp]>=k+1)
			++sp;
			//pop_first();
		if(nr==k)
		{
			sum+=dq[sp];
			nr--;
		}
		scanf("%d",&aux);
		add_to_dq(aux,i);
		++nr;
	}
	//sum+=dq[sp];
	printf("%lld",sum);
	return 0;
}