Cod sursa(job #1804170)

Utilizator k.bruenDan Cojocaru k.bruen Data 12 noiembrie 2016 11:57:39
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <deque>
#include <vector>
using std::ifstream;
using std::ofstream;
using std::deque;
using std::vector;

//#include <iostream>
//using std::cout;

deque<long> storage;
vector<long> number;
int temporary, numbers, limit;
long long sum;

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

int main () {
	in >> numbers >> limit;
	number.reserve(numbers);
	for (int i = 0; i < numbers; i++) {
		in >> temporary;
		number.push_back(temporary);
	}
	for (int i = 0; i < numbers; i++) {
		while (!storage.empty() && number[storage.back()] >= number[i]) {
			//cout << "Popped: " << number[storage.back()] << "\n";
			storage.pop_back();
		} 
			
		if (i + 1 >= limit) {
			while (!storage.empty() && i - storage.front() >= limit) {
				//cout << "Popped: " << number[storage.front()] << "\n";
				storage.pop_front();
			}
		}

		storage.push_back(i);
		//cout << "Pushed: " << number[i] << "\n";

		if (i + 1 >= limit) {
			sum += number[storage.front()];
			//cout << "Added to sum: " << number[storage.front()] << "\n";
		}
	}

	out << sum << "\n";
}