Pagini recente » Cod sursa (job #1679494) | Cod sursa (job #1149427) | Cod sursa (job #739761) | Cod sursa (job #2288736) | Cod sursa (job #2732041)
#include<fstream>
#include<iostream>
#include <stdio.h>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int n, k;
long long sum=0;
int deq[5000000]={0};
int main()
{
fin>>n>>k;
int A[n];
for (int i=1; i<=n; i++)
fin >> A[i];
int begin = 1, end = 0; //e<b->deq vid
for (int i = 1; i <= n; i++)
{// el curent este mai mic decat ultimul element din deq->eliminam poz ultimului el din deq
while (begin <= end and A[i] <= A[deq[end]])
end--;
deq[++end] = i;// adaugam poz el curent in deq
// daca el minim coincide cu el de pe poz i-K, ii eliminam pozitia din deq(acesta nu mai conteaza pentru pasii >= i)
if (deq[begin] == i - k)
begin++;
// luam minimul din varful deq
if (i >= k)
sum += A[deq[begin]];
}
//afisam suma
fout << sum;
fout.close();
return 0;
}