Cod sursa(job #2033701)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 7 octombrie 2017 10:06:52
Problema Deque Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>
using namespace std;

#define MAXN 5000004

int n, k, a[MAXN];
long long suma;
deque<int> deq;

int main() {
	freopen("deque.in", "r", stdin);
	freopen("deque.out", "w", stdout);
	
	scanf("%d %d ", &n, &k);
	for(int i = 1; i <= n; i++) {
		scanf("%d ", &a[i]);
	}

	for(int i = 1; i <= n; i++) {

		if(i < k) {
			while(!deq.empty() && a[i] < a[deq.back()]) {
				deq.pop_back();		
			}

			deq.push_back(i);

		} else {

			while(!deq.empty() && deq.front() <= i - k) {
				deq.pop_front();
			}

			while(a[i] < a[deq.back()] && !deq.empty()) {
				deq.pop_back();	
			}

			deq.push_back(i);

			suma += a[deq.front()];
		}
	}
	printf("%lld\n", suma);
	
	return 0;
}