Cod sursa(job #677785)

Utilizator marius135Dumitran Adrian Marius marius135 Data 10 februarie 2012 17:50:39
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
// Infoarena - Arhiva Educationala Deque
// Februrie 2012 Marius Dumitran
// Deque O(N)

#include<string.h>
#include<stdio.h>
#define maxn 50000001
int deque[maxn];
int time[maxn];
int last = -1;
int first = 0;

void add_deque (int val, int timp) { 
	
	while( last >= first && deque[ last ] >= val )
		last--;
	deque[ ++last ] = val;
	time[ last ] = timp;
}
void remove_deque( int timp ) {
	if( time[ first ] == timp ) 
		first++;
}

int main() {
	
	freopen ("deque.in", "r", stdin);
	freopen ("deque.out", "w", stdout);
	
	int N, K;
	scanf("%d %d", &N, &K);
	

	for( int i = 1; i <= K; ++i) {
		int a;
		scanf("%d", &a);
		add_deque (a, i);
	}
	long long sol = deque[0];
	for (int i = K + 1; i <= N; ++i) {
		int a;
		scanf("%d", &a);
		add_deque (a, i);
		remove_deque (i - K);
		sol += deque[ first ];
	}
	printf("%lld\n", sol);
	
	
	return 0;
}