Cod sursa(job #810841)

Utilizator ahmed.abdraboahmed.abdrabo ahmed.abdrabo Data 11 noiembrie 2012 08:04:37
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#include <deque>

using namespace std;

int n, k;
int A[5000000];

deque<int> q1, q2;

void pop() {
	if (q1.front() == q2.front()) {
		q2.pop_front();
	}
	q1.pop_front();
}

void push(int n) {
	while (q2.size() && q2.back() > n)
		q2.pop_back();
	q2.push_back(n);
	q1.push_back(n);
}

int min() {
	return q2.front();
}

int main() {
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);
	scanf("%d%d", &n, &k);
	for (int i = 0; i < n; i++) {
		scanf("%d", A + i);
	}
	for (int i = 0; i < k; i++) {
		push(A[i]);
	}
	long long ans = min();
	for (int i = k; i < n; i++) {
		pop();
		push(A[i]);
		ans += min();
	}
	printf("%lld", ans);
	return 0;
}