Pagini recente » Istoria paginii runda/795353277152115/clasament | Cod sursa (job #623697) | Cod sursa (job #582294) | Cod sursa (job #443823) | Cod sursa (job #2725262)
#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;
}