Pagini recente » Cod sursa (job #2691762) | Borderou de evaluare (job #2692912) | Cod sursa (job #2411306) | Cod sursa (job #1494255) | Cod sursa (job #2730576)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int A[5000001],Deq[5000001];
bool isempty(int v[5000001], int start, int end)
{
return start > end;
}
int main()
{
int N, K;
int minim; //retine minimul din secventa de k curenta
int start, end;
int x;
long long sum = 0;
start = 0;
end = -1;
fin>>N>>K;
for(int i = 0; i < N; i++)
fin>>A[i];
for(int i = 0 ; i < N; i++)
{
while (start <= end && A[i] <= A[Deq[end]]) //cat timp deque nu e gol si elem curent este mai mic decat A[deq.end]
end--;
Deq[++end] = i; //adaugam poz elem curent la capatul deque
if(Deq[start] == i-K) //daca primul element din Deque corespunde cu poz primului element din secventa curenta de K elem
start++; //pop_front
if(i +1 >= K) //daca nu suntem in prima secventa de K
sum += A[Deq[start]]; //adaugam la suma primul element din deq
}
fout<<sum;
fin.close();
fout.close();
return 0;
}