Cod sursa(job #1212573)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 25 iulie 2014 11:11:51
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define SIZE 5000001
using namespace std;


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

int A[SIZE];
int DQ[SIZE], first = 1, last = 0;


#define is_empty_deque() (first > last)
#define get_last() (DQ[last])
#define get_first() (DQ[first])
#define remove_first() (++first)
#define remove_last() (--last)
#define add_last(e) (DQ[++last] = e)

int main()
{
	int n, k;
	long long sum = 0;
	
	ifs >> n >> k;
	
	for (int i = 1; i < k; ++i)
	{
		ifs >> A[i];
		while (!is_empty_deque() && A[i] < A[get_last()])
		{
			remove_last();
		}
		
		add_last(i);
	}
	
	for (int i = k; i <= n; ++i)
	{
		if (get_first() < (i-k+1))
		{
			remove_first();
		}
	
		ifs >> A[i];
		while (!is_empty_deque() && A[i] < A[get_last()])
		{
			remove_last();
		}
		
		add_last(i);
		
		sum += A[get_first()];
	}
	
	ofs << sum << "\n";
	
	return 0;
}