Cod sursa(job #537139)

Utilizator maritimCristian Lambru maritim Data 20 februarie 2011 11:26:34
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
using namespace std;

typedef struct
{
	long int poz;
	long int val;
} numar;

long int n;
long int i;
long int Front;
long int Back;
long int k;
numar Deck[5000001];
long long sum;

void citire(void)
{
	long int a;
	FILE *f = fopen("deque.in","r");
	
	fscanf(f,"%d %d",&n,&k);
	Front = 1; Back = 0;
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&a);
		while(Front<=Back && a<=Deck[Back].val) Back --;
		Deck[++Back].poz = i;
		Deck[Back].val = a;
		if(Deck[Front].poz == i-k) Front ++;
		if(i>=k) sum += Deck[Front].val;
	}
	
	fclose(f);
}

int main()
{
	FILE *f = fopen("deque.out","w");
	
	citire();
	fprintf(f,"%lld",sum);
	
	fclose(f);
	return 0;
}