Cod sursa(job #2999594)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 11 martie 2023 10:44:31
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;

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

int pq = 0, uq = -1;

//pq - primul din coada
//uq - ultimul din coada

//In practica in coada NU retinem si valoarea elementului, ci doar indicele ( pt. ca avand indicele, elementul il luam direct din vector)

int n, k;
int a[5000005];
int q[5000005];
long long sum = 0;
int main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n; i++)
	{
		//actualizam coada luandu-l in calcul pe a[i]
		//deci golesc coada de elemntele mai mari deact a[i]
		while (pq <=uq && a[i] <= a[q[uq]])
			uq--;
		q[++uq] = i;
		//verific daca primul din coada mai face parte din secventa curenta. Daca nu, il sterg.
		if (q[pq] <= i - k)
			pq++;
		//afisez minimul
		if (i >= k)
			sum += a[q[pq]];
	}
	cout << sum;
	return 0;
}