Pagini recente » Cod sursa (job #3032778) | Cod sursa (job #1699662) | Cod sursa (job #1562688) | Cod sursa (job #2529839) | Cod sursa (job #3038883)
#include<fstream>
#include<iostream>
#include<queue>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int main() {
int a[5000001];
int n, k;
fin >> n >> k;
for (int i=0; i<n; i++)
fin >> a[i];
deque<int> sir;
long long suma = 0;
for (int i = 0; i < n; i++)
{
//verific daca elementul de pe i este mai mic decat ultimul element din deque, in cazul acesta facem pop
while (!sir.empty() && a[i] <= a[sir.back()])
sir.pop_back();
sir.push_back(i); //adaugam index-ul i in coada deque-ului
//verific daca elementul minim este egal cu cel de pe pozitia i-k, in cazul acesta il eliminam
if (sir.front() == i-k)
sir.pop_front();
//afisam minimul in momentul in care subsecventele sunt mai mari sau egale cu k
if (i >= k-1)
suma += a[sir.front()];
}
fout << suma;
fin.close();
fout.close();
}