Cod sursa(job #1688863)

Utilizator dancojocaru2000Dan Cojocaru dancojocaru2000 Data 13 aprilie 2016 19:29:57
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <vector>
#include <deque>
using namespace std;

ifstream intrare("deque.in");
ofstream iesire("deque.out");

int n, k;
vector<int> vec;
long long rez;
deque<int>Q;

int main() {
	ios::sync_with_stdio(false);

	intrare >> n >> k;
	vec = vector<int>(n);
	for (int i = 0; i < n; i++) intrare >> vec[i];

	Q.push_back(0);
	for (int i = 1; i < n; i++) {
		if (!(i - k < 0)) rez += vec[Q.front()];
		if (Q.front() <= i - k) {
			Q.pop_front();
		}
		if (Q.empty()) {
			Q.push_back(i);
			rez += vec[Q.back()];
			continue;
		}
		while (vec[Q.back()] >= vec[i]) {
			Q.pop_back();
			if (Q.empty()) break;
		}
		Q.push_back(i);
	}
	rez += vec[Q.front()];

	iesire << rez;
}