Pagini recente » Cod sursa (job #1532661) | Cod sursa (job #1990074) | Cod sursa (job #1279365) | Cod sursa (job #1990153) | Cod sursa (job #1785398)
#include <fstream>
#include <deque>
using namespace std;
#define Nmax 5000002
ifstream fin("deque.in");
ofstream fout("deque.out");
deque<int> Q;
int v[Nmax];
int main() {
int N, K;
long long S = 0;
fin >> N >> K; //citesc
for (int i = 1; i <= N; ++i) {
fin >> v[i]; // citesc elementele
while (!Q.empty() && v[i] <= v[Q.back()]) // scot toate elementele mai mari decat elementul curent
Q.pop_back(); // deoarece nu pot fi minime pt viitoarele secvente
Q.push_back(i); // adaug elementul curent ( prin indice )
if (Q.front() <= i - K) // daca primul element nu se mai afla in cele K curente, il scot
Q.pop_front();
if (i >= K) //daca am macar K elemente
S += v[Q.front()]; // adaug minimul din secventa
}
fout << S; //afisez
return 0;
}