Cod sursa(job #2761986)

Utilizator cosmin1812Nedelcu Adrian Cosmin cosmin1812 Data 4 iulie 2021 21:27:11
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include <iostream>
using namespace std;

int v[1000000];
int deque[1000000];

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


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

	int i, n, k;
	int primul, ultim;
	int 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
		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
		//?
		if (i >= k)
			suma = suma + v[deque[primul]];
		 
	}

	g << suma;

}