Cod sursa(job #2940301)

Utilizator IanisBelu Ianis Ianis Data 15 noiembrie 2022 11:21:12
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <bitset>
#include <stack>
#include <queue>
#include <deque>

using namespace std;

#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("deque.in");
ofstream fout("deque.out");
#endif

const int NMAX = 5e6+5;

int n, k, a[NMAX];
deque<int> dq;
int64_t ans;

void add(int idx) {
	while (!dq.empty() && a[dq.back()] >= a[idx])
		dq.pop_back();
	dq.push_back(idx);
}

void remove(int idx) {
	while (!dq.empty() && dq.front() <= idx)
		dq.pop_front();
}

int64_t query() {
	return a[dq.front()];
}

int main() {
	fin >> n >> k;
	for (int i = 1; i <= n; i++)
		fin >> a[i];
	for (int i = 1; i <= k; i++)
		add(i);
	ans = query();
	for (int i = 2; i <= n - k + 1; i++) {
		add(i + k - 1);
		remove(i - 1);
		ans += query();
	}
	fout << ans;
	return 0;
}