Cod sursa(job #1491533)

Utilizator dimavascan94VascanDumitru dimavascan94 Data 25 septembrie 2015 17:04:30
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <deque>
#include <iostream>
using namespace std;

deque<int> vals, poss;
int n, k, i, nmb, min_nmb, j;
long long sum = 0;

int main()
{
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);
	scanf("%d%d",&n,&k);

	for (i = 0; i < n; ++i)
	{
		min_nmb = 10000001;
		scanf("%d",&nmb);

		while (vals.size()>0 && (vals.at(vals.size() - 1) >= nmb 
				|| poss.at(vals.size() - 1) < i - k + 1))
			vals.pop_back(), poss.pop_back();

		while (poss.size()>0 && poss.at(0) < i - k + 1) poss.pop_front(), vals.pop_front();

		vals.push_back(nmb), poss.push_back(i);

		if (i + 1 >= k)
		{
			j = vals.size() - 1;
			while (j >= 0 || poss[j] >= i - k + 1)
			{
				if (min_nmb>vals.at(j))	min_nmb = vals.at(j--);
			}
			sum += min_nmb;
		}
	}

	cout << sum;
}