Cod sursa(job #2761997)

Utilizator cosmin1812Nedelcu Adrian Cosmin cosmin1812 Data 4 iulie 2021 22:00:13
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include<fstream>
#include <iostream>
using namespace std;


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

int v[5000001];
int deque[5000001];

int main()
{
// folosesc coada cu 2 capete in care memorez pozitiile din vectorul
// v si pozitiile vor fi in ordine crescatoare pentru ca stergem mereu cand
// gasim o pozitie din v mai mica



	int i;
	long long n, k;
	int primul, ultim;
	long long suma = 0;



	f >> n>> k;

	for (i = 0; i < n; i++) {

		f >> v[i];

	}

	primul = 0;
	ultim = -1;

	for (i = 0; i < n; i++) {



		//la fiecare parcurgere valoarea v[i] eliminia de la finalul lui v 
		//toate elementele mai mari sau egale cu el
		//deci, el devine noul minim pentru urmatoarele posbile secvente

		//merge bine
		while (primul <= ultim and v[i] <= v[deque[ultim]]) {

			ultim--;
		}


		//il adaugam la finalul lui deque pozitia
		ultim++;
		deque[ultim] = i;



		//sterg de la inceput lui deque dc minimul nu apartine subsecventei
		if (deque[primul] + k == i)
			primul++;
			//Ruleaza bine aici


		//daca avem minim o subsecventa de k elemente
		// 
		//face bine
		if (i + 1 >= k)
			suma += v[deque[primul]];
		 
	}

	g << suma;


	f.close();
	g.close();
	return 0;
}