Pagini recente » Cod sursa (job #624751) | Cod sursa (job #1828150) | Cod sursa (job #629959) | Cod sursa (job #2077990) | Cod sursa (job #1467544)
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
// Paul Dan-Baltescu Infoarena
// explicat foarte bine
int N, K;
int *A, *deque;
fstream fin, fout;
fin.open("deque.in");
freopen("deque.out", "w", stdout);
fin>>N>>K;
long long sum = 0;
A = new int[N + 1];
deque = new int[N+1];
for(int i=1;i<=N;i++)
{
fin>>A[i];
}
int B=0, F=1;
for(int i=1;i<=N;i++)
{
while(B>=F && A[i] <= A[deque[B]]) B--;
deque[++B] = i;
// eliminam de la inceputul cozii duble elementul curent
// i.e. a depasit secventa de K elemente
if(deque[F] == i-K) F++;
if(i>=K) sum+= A[deque[F]];
}
printf("%lld", sum);
delete[] A;
fin.close();
fout.close();
return 0;
}