Cod sursa(job #1052888)

Utilizator sp3ct3rFMI Dima Robert sp3ct3r Data 11 decembrie 2013 21:22:46
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <deque>
using namespace std;

struct elmt
{
	int d_time, value;
};

long long makeStep(int k, int offset, int n);

deque<elmt> deq;

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

	int n, k, offset;
	

	cin >> n >> k;
	for (int i = 0; i < k - 1; i++)
	{
		int val;
		elmt e;
		cin >> val;
		if (deq.empty())
		{
			e.value = val;
			e.d_time = i + k;
			deq.push_back(e);
		}
		else
		{
			while (!deq.empty() && deq.back().value > val)
			{
				deq.pop_back();
			}
			e.value = val;
			e.d_time = i + k;
			deq.push_back(e);
		}
	}

	offset = k - 1;

	cout << makeStep(k, offset, n);
	return 0;
}

long long makeStep(int k, int offset, int n)
{
	int val;
	elmt e;
	long long sum = 0;
	while (offset < n)
	{
		cin >> val;
		if (deq.empty())
		{
			e.value = val;
			e.d_time = offset + k;
			deq.push_back(e);
		}
		else
		{
			while (!deq.empty() && deq.back().value > val)
			{
				deq.pop_back();
			}
			e.value = val;
			e.d_time = offset + k;
			deq.push_back(e);
		}
		while (!deq.empty() && deq.front().d_time <= offset)
		{
			deq.pop_front();
		}
		offset++;
		sum += deq.front().value;
	}
	return sum;
}