Cod sursa(job #2731563)

Utilizator AlexCrpCarpineanu Alexandru AlexCrp Data 27 martie 2021 22:16:26
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.12 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
/*
class stiva {
private:
	int n = 10;
	char* v;
	int lungime;
public:
	void push(char x) {
		if (lungime == n - 1)
		{
			char* aux;
			n *= 2;
			aux = new char[n];

			for (int i = 0; i < n / 2; i++)
				aux[i] = v[i];

			delete[] v;

			v = aux;
		}
		v[lungime++] = x;
	}

	int pop() {
		char elem;
		if (lungime > 0) {
			lungime--;
			elem = v[lungime];
			if (lungime < n / 4)
			{
				char* aux;
				n /= 4;

				aux = new char[n];

				for (int i = 0; i < n; i++)
					aux[i] = v[i];

				delete[] v;
				v = aux;
			}
			return elem;
		}
		else {
			return NULL;
		}
	}
	int get_n()
	{
		return n;
	}
	stiva() {
		lungime = 0;
		v = new char[n];
		for (int i = 0; i < n; i++)
			v[i] = 0;
	}

};


int main() {

	stiva stack;
	int n, i, max=0, k=0,N;
	char paranteza, p;
	bool corect = true, ok=true;

	ifstream fin("paranteze.in");
	ofstream fout("paranteze.out");

	fin >> n;

	for (i = 0; i < n; i++)
	{
		fin >> paranteza;
		if ((paranteza == '(' || paranteza == '[' || paranteza == '{'))
		{
			stack.push(paranteza);
			if (k > max)
			{
				max = k;
				k = 0;
			}
		}
		else
		{
			p = stack.pop();
			if (p == NULL)
			{
				corect = false;
				k = 0;
			}
			else if (p == '(' && paranteza == ')' || p == '[' && paranteza == ']' || p == '{' && paranteza == '}')
			{
				k += 2;
				corect = true;
			}
			else
			{
				corect = false;
				k = 0;
			}
		}
	}

	fout << max;

	fout.close();
	return 0;
}
*/

int deque[5000005], v[5000005];

int main() {
	ifstream fin("deque.in");
	ofstream fout("deque.out");

	int  i, n, k, fata, spate;
	long long s = 0;


	fin >> n >> k;


	fata = 0;
	spate = -1;

	for (i = 0; i < n; i++)
	{
		fin >> v[i];

		while (fata <= spate && v[i] <= v[deque[spate]])
		{
			spate--;
		}
		spate++;
		deque[spate] = i;

		if (deque[fata] == i - k)
		{
			fata++;
		}
		if (i >= k - 1)
		{
			s += v[deque[fata]];
			cout << s << ' ';
		}
	}

	fout << s;

	fout.close();
	return 0;
}