Pagini recente » Cod sursa (job #845788) | Cod sursa (job #2356707) | Cod sursa (job #337847) | Cod sursa (job #1914809) | Cod sursa (job #2999588)
#include <fstream>
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
int pq = 0, uq = -1;
//pq - primul din coada
//uq - ultimul din coada
//In practica in coada NU retinem si valoarea elementului, ci doar indicele ( pt. ca avand indicele, elementul il luam direct din vector)
int n, k;
long long a[5000000];
long long q[5000000];
long long sum = 0;
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
//actualizam coada luandu-l in calcul pe a[i]
//deci golesc coada de elemntele mai mari deact a[i]
while (pq <=uq && a[i] <= a[q[uq]])
uq--;
q[++uq] = i;
//verific daca primul din coada mai face parte din secventa curenta. Daca nu, il sterg.
if (q[pq] <= i - k)
pq++;
//afisez minimul
if (i >= k)
sum += a[q[pq]];
}
cout << sum;
return 0;
}