Cod sursa(job #461962)

Utilizator toniobFMI - Barbalau Antonio toniob Data 9 iunie 2010 14:17:38
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
using namespace std;

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

int deq[5000001], st, dr, v[5000001], n, k;
long long rez;

inline void citire () {
	in >> n >> k;
	for (int i = 1; i <= n; in >> v[i++]) { }
}

inline void stanga (int i) {
	if (deq[st] == i - k) {
		++st;
	}
}

void dreapta (int i) {
	for (; st <= dr && v[i] <= v[deq[dr]]; --dr) { }
	deq[++dr] = i;
}

inline void aduna (int i) {
	if (i >= k) {
		rez += v[deq[st]];
	}
}

int main () {
	citire ();
	
	for (int i = 1; i <= n; stanga (i), dreapta (i), aduna (i), ++i) { }
	
	out << rez << '\n';
	
	return 0;
}