Pagini recente » Cod sursa (job #2893542) | Cod sursa (job #301523) | Cod sursa (job #2583561) | Cod sursa (job #1193153) | Cod sursa (job #2728251)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
/*
Idee:
- parcurgem toate elementele vectorului
- cat timp deque nu e empty si elementul curent A[i] <= A[back] scoatem elemente
din deque
*/
int main() {
ifstream in("deque.in");
ofstream out("deque.out");
vector<int> A;
deque<int> deque;
int N, K, x, suma=0;
in>>N>>K;
A.push_back(0);
for(int i=1; i<=N; i++)
{
in>>x;
A.push_back(x);
}
for(int i=1; i<=N; i++)
{
while(!deque.empty() && A[i]<=A[deque.back()])
deque.pop_back(); //il scoate mereu pe cel mai mare
deque.push_back(i);
if(deque.front() == i-K)
deque.pop_front(); //eliminam elementul minim (care e in front ul cozii), pentru ca el a fost deja adaugat la suma la pasul anterior
if(i>=K)
suma+=A[deque.front()];
}
out<<suma;
return 0;
}