Cod sursa(job #362551)

Utilizator Addy.Adrian Draghici Addy. Data 9 noiembrie 2009 22:57:47
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
#define Nmax 5000100

int A[Nmax], deque[Nmax];
int p, u, i, n, k;
long long sol;

int main() {
	
	FILE *f = fopen("deque.in", "r");
	FILE *g = fopen("deque.out", "w");
	
	fscanf(f, "%d %d", &n, &k);
	for (i = 1; i <= n; i++)
		fscanf(f, "%d", &A[i]);
	
	p = 1, u = 0;
	for (i = 1; i <= n; i++) {
		//elimin elementele mai mari din deque
		while (p <= u && A[i] <= A[ deque[u] ]) u--;
		
		//adaug elementul curent
		deque[++u] = i;
		
		//avansez cu o pozitie in fata
		if (deque[p] == i-k) p++;
		
		//adun minimul la solutie
		if (i >= k) sol += A[ deque[p] ];
	}
	
	fprintf(g, "%lld", sol);
	
	fclose(f);
	fclose(g);
	
	return 0;
}