Pagini recente » Cod sursa (job #2254253) | Cod sursa (job #668085) | Cod sursa (job #2948560) | Cod sursa (job #123423) | Cod sursa (job #3303746)
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
int main()
{
const int Max = 1e6;
int n, lungSecv, v[Max + 5];
long long sumMin = 0;
deque <int> Minim;
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> lungSecv;
for (int i = 1; i <= n; i++)
cin >> v[i];
for (int i = 1; i <= n; i++)
{
while (!Minim.empty() && v[Minim.back()] >= v[i])
Minim.pop_back();
Minim.push_back(i);
while (!Minim.empty() && Minim.front() < i - lungSecv + 1)
Minim.pop_front();
if (i >= lungSecv)
sumMin += v[Minim.front()];
}
cout << sumMin;
return 0;
}
/*
Introducem elementele din vector in deque pe parcursul parcurgerii
Scoatem elementele mai mari decat cele din dreapta lor
Scoatem elementele care nu mai apartin subsecventei curente
K = 3
-7 9 2 4 -1 5 6 7 1
1
*/