Cod sursa(job #2205230)

Utilizator dragomir_ioanDragomir Ioan dragomir_ioan Data 18 mai 2018 15:42:32
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
#include<deque>
#include<utility>

using namespace std;

#define VAL(d) d.first
#define POZ(d) d.second
#define VALOARE(x) x
#define POZITIE(x) x

int n, k, i;
deque< pair<long long, int> > d;

int main() {
	FILE *fin = fopen("deque.in", "r");
	fscanf(fin, "%d%d", &n, &k);
	for(i=0; i<k; i++) {
		int x;
		fscanf(fin, "%d", &x);

		while(!d.empty() && VAL(d.back()) > x) d.pop_back();
		d.push_back(make_pair(VALOARE(x), POZITIE(i)));
	}

	long long suma = VAL(d.front());
	for(; i<n; i++) {
		// scoate ala care nu mai e in secventa
		if(!d.empty() && POZ(d.front()) <= i-k) d.pop_front();

		// baga urmatorul
		int x;
		fscanf(fin, "%d", &x);

		while(!d.empty() && VAL(d.back()) > x) d.pop_back();
		d.push_back(make_pair(VALOARE(x), POZITIE(i)));

		suma += VAL(d.front());
	}
	fclose(fin);

	FILE *fout = fopen("deque.out", "w");
	fprintf(fout, "%lld\n", suma);
	fclose(fout);

	return 0;
}