Pagini recente » Cod sursa (job #3367325) | Cod sursa (job #3367831) | Cod sursa (job #3368789) | Cod sursa (job #3367874) | Cod sursa (job #3368714)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
int main() {
ifstream fin("deque.in");
ofstream fout("deque.out");
int n, k;
if (!(fin >> n >> k)) return 0;
vector<long long> v(n + 1);
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
deque<int> dq;
long long suma_minime = 0;
for (int i = 1; i <= n; ++i) {
// 1. Eliminam elementele mai mari sau egale din spatele deque-ului
while (!dq.empty() && v[dq.back()] >= v[i]) {
dq.pop_back();
}
// 2. Adaugam indicele curent
dq.push_back(i);
// 3. Eliminam elementele care au iesit din fereastra de lungime K
if (dq.front() <= i - k) {
dq.pop_front();
}
// 4. Adaugam minimul ferestrei curente la suma (doar cand avem o fereastra completa)
if (i >= k) {
suma_minime += v[dq.front()];
}
}
fout << suma_minime << "\n";
return 0;
}