Cod sursa(job #2439809)

Utilizator ShayTeodor Matei Shay Data 16 iulie 2019 22:07:22
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <deque>

inline int read() {
	int n = 0;
	int neg = 1;
	char c = getchar_unlocked();
	if (c == '-') {
		neg = -1;
	}
	while (!('0' <= c && c <= '9')) {
		c = getchar_unlocked();
	}

	while ('0' <= c && c <= '9') {
		n = n * 10 + c - '0';
		c = getchar_unlocked();
	}

	return n * neg;
}

int main() {
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);

	int n, k;
	n = read(), k = read();
	int a[n];
	long long sum = 0;
	for (int i = 1 ; i <= n ; ++i) {
		a[i] = read();
	}

	std::deque<int> deq;

	for (int i = 1 ; i <= n ; ++i) {
		while (!deq.empty() && a[i] <= a[deq.back()]) {
			deq.pop_back();
		}

		deq.push_back(i);

		if (deq.front() == i - k) {
			deq.pop_front();
		}

		if (i >= k) {
			sum += a[deq.front()];
		}
	}

	printf("%lld\n", sum);
	return 0;
}