Cod sursa(job #344271)

Utilizator digital_phreakMolache Andrei digital_phreak Data 29 august 2009 15:09:49
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define MAXN 5000010
using namespace std;

long A[MAXN],Deque[MAXN];
long Back,Front,N,K;
long long int res;

int main() {
	long i;
	
	freopen("deque.in","r",stdin);
	freopen("deque.out","w",stdout);
	
	scanf("%ld%ld",&N,&K);
	
	for (i=0;i<N;++i) scanf("%ld",&A[i]);
	Back = -1;
	Front = 0;
	
	for (i=0;i<N;++i) {
			while (Front <= Back && A[i] <= Deque[Back]) Back--;
			Deque[++Back] = A[i];
			if ((i-K>=0)&&(Deque[Front] == A[i-K])) Front++;
			if (i>=K-1) res = res + (long long int)Deque[Front];
	}
	
	printf("%lld\n",res);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}