Cod sursa(job #344275)

Utilizator digital_phreakMolache Andrei digital_phreak Data 29 august 2009 15:15:10
Problema Deque Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 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 res;

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