Cod sursa(job #1081963)

Utilizator danny794Dan Danaila danny794 Data 13 ianuarie 2014 23:52:37
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <deque>

using namespace std;

const int NMAX = 5000005;
long long sum;
int N, K;
int array[NMAX];
deque< int > minimum;

void read() {
	freopen( "deque.in", "r", stdin );
	freopen( "deque.out", "w", stdout );
	scanf("%i %i", &N, &K);
}

inline void add(int x) {
	while( !minimum.empty() && minimum.back() > x )
		minimum.pop_back();
	minimum.push_back(x);
}

void readK() {
	scanf("%i", &array[0]);
	minimum.push_back(array[0]);
	for(int i = 1; i < K; i++) {
		scanf("%i", &array[i]);
		while( !minimum.empty() && minimum.back() > array[i] )
			minimum.pop_back();
		minimum.push_back(array[i]);
	}
	sum = minimum.front();

}

void solve() {
	readK();
	for(int i = K; i < N; i++) {
		if( minimum.front() == array[i - K] )
			minimum.pop_front();
		scanf("%i", &array[i]);
		add(array[i]);
		sum += minimum.front();
	}
}

int main() {
	read();
	solve();
	printf("%lld", sum);
	return 0;
}