Cod sursa(job #509122)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 10 decembrie 2010 14:54:48
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<iostream>
#include<fstream>
using namespace std;

const int N=5000001;
int n,k,v[N],d[N],st,dr=-1,i;
long long s;
ifstream aa("deque.in");
ofstream ss("deque.out");
inline void stanga(int i)
{
	if (i-d[st]==k) {
		++st;
	}
}

inline void dreapta(int i){
	while (st<=dr && v[d[dr]]>=v[i]) {
		--dr;
	}
} 
inline void adauga(int i) {
	d[++dr]=i;
}

int main () {
	aa >> n >> k;
	//int i;
	for (i=1;i<=n;++i) {
		aa >> v[i];
	}
	for (i=1;i<=k;++i) {
		dreapta(i);
		adauga(i);
	}
	s+=v[d[st]];
	for(;i<=n;++i) {
		stanga(i);
		dreapta(i);
		adauga(i);
		s+=v[d[st]];
	}
	ss << s << "\n";
	return 0;
}