Pagini recente » Borderou de evaluare (job #1535611) | Cod sursa (job #3331409) | Cod sursa (job #3309058) | Cod sursa (job #775457) | Cod sursa (job #3303749)
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, x, j, k;
long long s = 0;
cin >> n >> k;
deque<pair<int, int>>dq(n+1);
vector<int>v(n+1);
for(int i = 1; i<= n; i++)
{
int j = i-k+1;
cin >> v[i];
while(!dq.empty() and v[i] < dq.back().first)
{
dq.pop_back();
}
dq.push_back({v[i], i});
if(dq.front().second < j)dq.pop_front();
if(i >= k)s+=dq.front().first;
}
cout << s;
return 0;
}
/*introducem elementele in deque pe masura ce le citim din vector.
Daca gasim unul mai mic decat ultimul introdus, le stergem pe toate pana pana cand acesta devine mai mare decat toate elementele deja existente in deque.
Apelam pentru fiecare element nou citit primul element din deque, fiind minimul, iar daca ajungem intr-o noua subsecventa de lungime k, stergem primul element din deque*/