Cod sursa(job #3172493)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 20 noiembrie 2023 19:01:10
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 5e6 + 7;
int v[nmax];

struct MinDeque {
	deque<int> indexes;

	void add_element(int index) {
		while(!indexes.empty() && v[indexes.back()] >= v[index]) {
			indexes.pop_back();
		}
		indexes.push_back(index);
	}

	void remove_element(int index) {
		if(!indexes.empty() && indexes.front() == index) {
			indexes.pop_front();
		}
	}

	int get_min() {
		return v[indexes.front()];
	}
};

int main() {
	int n, k; cin >> n >> k;
	for(int i = 1; i <= n; i++) cin >> v[i];

	// initialize the window from [1 ... k]
	MinDeque md;

	for(int i = 1; i <= k; i++) {
		md.add_element(i);
	}

	long long ans = md.get_min();

	for(int i = k + 1; i <= n; i++) {
		md.add_element(i);
		md.remove_element(i - k);
		ans += md.get_min();
	}

	cout << ans << endl;
}