Cod sursa(job #657012)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 5 ianuarie 2012 17:21:36
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
//problema deque  arhiva educationala infoarena
#include <fstream>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int n, k;
int a[5000010], Deque[5000010];
int st, dr;
long long rez;

int main()
{
	int i;
	f>>n>>k;
	for (i = 1; i <= n; i++) 
		f>>a[i];
	st = 1, dr = 0; //	Initializare, dr < st => deque-ul este vid
	for (i = 1; i <= n; i++)
	{
		// Cat timp elementul curent este mai mic decat ultimul element din deque, eliminam pozitia ultimului element din deque 
		while (st <= dr && a[i] <= a[ Deque[dr] ]) dr--;		
		// Adaugam pozitia elementului curent in deque
		Deque[++dr] = i;
		// Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i
		if (Deque[st] == i-k) st++;
		// Afisam minimul, acesta aflandu-se in varful deque-ului
		if (i >= k) rez += a[ Deque[st]]; 	
	}
	g<<rez;
	return 0;
}