Pagini recente » Cod sursa (job #486967) | Cod sursa (job #554977) | Cod sursa (job #340485) | Cod sursa (job #1446949) | Cod sursa (job #2732197)
#include <iostream>
#include <fstream>
#include <stdio.h>
#define Nmax 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int N, K;
int a[Nmax];
int Deque[Nmax], front, back;
int main()
{
// citirea
fin >> N >> K;
for ( int i = 1; i <= N; i++ )
fin >> a[i];
long long S = 0;
front = 1;
back = 0;
for ( int i = 1; i <= N; i++ )
{
while ( front <= back && a[i] <= a[Deque[back]])
back--; // eliminarea elementelor >= decat a[i]
back++;
Deque[back] = i;
if ( Deque[front] == i-K ) front++; // daca elementul minim coincide cu cel de pe pozita i-K, il eliminam
if ( i >= K ) S += a[Deque[front]]; // adaugarea minimului la suma
}
fout << S;
return 0;
}