Pagini recente » Cod sursa (job #829376) | Cod sursa (job #2485367) | Cod sursa (job #869533) | Cod sursa (job #650163) | Cod sursa (job #2999591)
#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[5000005];
long long q[5000005];
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;
}