Cod sursa(job #811385)

Utilizator bixcabc abc bixc Data 12 noiembrie 2012 00:42:47
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define NMAX 5000010

int N, K;
int value[NMAX];
int deque[NMAX];

void read_data () {
	
	scanf ("%d %d", &N, &K);
	for (int i = 0; i < N; i++)
		scanf ("%d", &value[i]);
}

void solve () {
	
	long long sum = 0;
	int left = 0, right = -1;
	for (int i = 0; i < N; i++) {
    	while (left <= right && deque[left] < i - K + 1) left++;
		while (left <= right && value[ deque[right] ] > value[i]) right--;
		
	    deque[++right] = i;
	    if (i >= K - 1)
			sum+= (long long) value[ deque[left] ];
	}
	
	printf ("%lld\n", sum);
}

int main () {
	
	freopen ("deque.in", "r", stdin);
	freopen ("deque.out", "w", stdout);
	
	read_data ();
	solve ();
	
	return 0;
}