Cod sursa(job #399375)

Utilizator lamez0rBogdan Bondor lamez0r Data 20 februarie 2010 13:32:12
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<stdio.h>
long n,v[5000001],deque[5000001],k;
long long sum;
FILE *f;

void read ()
	{
	f=fopen("deque.in","r");
	fscanf(f,"%ld%ld",&n,&k);
	long i;
	for (i=1;i<=n;++i)
		fscanf(f,"%ld",&v[i]);
	fclose(f);
	}

void solve ()
	{
	long i,inc,sf;
	inc=1;
	sf=0;
	for (i=1;i<=n;++i)
		{
		//eliminam elementele mai mari
		while (inc<=sf && v[i]<=v[deque[sf]])
			--sf;
		//adaug elemntul
		deque[++sf]=i;
		//daca e depasit minimul, il scot
		if (deque[inc]==i-k)
			++inc;
		if (i>=k)
			sum+=v[deque[inc]];
		}
	f=fopen("deque.out","w");
	fprintf(f,"%lld",sum);
	fclose(f);
	}

int main ()
{
read ();
solve ();
return 0;
}