Cod sursa(job #531061)

Utilizator icepowdahTudor Didilescu icepowdah Data 8 februarie 2011 20:53:54
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
using namespace std;

#define NMAX 500001

int N, K, front = 1, back = 0, V[NMAX], DEQUE[NMAX];
ifstream f("deque.in");
ofstream g("deque.out");

inline bool isEmpty() { return front>back;}
inline int pop_back() { return DEQUE[back--];}
inline int pop_front() {return DEQUE[front++];}
void push_back(int val) { if (back<NMAX) DEQUE[++back] = val; }

int main() {	
	long long sum = 0;
	f>>N>>K;
	for (int i=1;i<=N;i++) {
		f>>V[i];
	}
	for (int i=1;i<=N;i++) {
		while (!isEmpty() && V[i] <= V[DEQUE[back]]) {
			pop_back();
		}
		push_back(i);
		if (DEQUE[front] == i-K) pop_front();
		if (i>=K) sum+=V[DEQUE[front]];
	}
	g<<sum<<"\n";
	f.close(); g.close();
	return 0;
}