Cod sursa(job #1279568)

Utilizator evodaniVasile Daniel evodani Data 30 noiembrie 2014 16:15:13
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <cstdio>
#include <deque>
using namespace std;

#define NMAX 5000005

FILE *fin, *fout;

int A[NMAX];
long long sum;
deque <int> minsDeque;

int main() {
	fin = fopen ("deque.in", "r"); fout = fopen ("deque.out", "w");

	int i, n, k;
	fscanf (fin, "%d%d", &n, &k);

	for (i=1; i<=n; ++i) fscanf (fin, "%d", &A[i]);

	for (i=1; i<=n; ++i) {
		if (!minsDeque.empty())
			while (A[i] < A[minsDeque.back()]) minsDeque.pop_back();
		minsDeque.push_back(i);

		if (i>=k) {
			if (minsDeque.front() == i-k) minsDeque.pop_front();
			sum += A[minsDeque.front()];
		}
	}

	fprintf (fout, "%lld\n", sum);

	fclose(fin); fclose(fout);
	return 0;
}