Pagini recente » Cod sursa (job #3330160) | Cod sursa (job #1037488) | Cod sursa (job #623198) | Cod sursa (job #2935893) | Cod sursa (job #3314809)
#include <bits/stdc++.h>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
const int N = 5000001;
int n,k,a[N],q[N],B=1,E=0; /// a[] pentru valori
int64_t sol; /// se recomanda ca solutia sa fie pe 64 de biti
int main()
{
f>>n>>k;
for(int i=1;i<=n;i++)
f>>a[i];
/// initializarea cozii de indici pentru prima secventa
for(int i=1;i<k;i++)
{
/// elimina orice valoare mai mare decat a[i] de la finalul cozii
while(B<=E && a[q[E]]>=a[i])
E--;
/// adauga ultima valoare
q[++E]=i;
}
for(int i=k;i<=n;i++)
{
/// elimina orice valoare mai mare decat a[i] de la finalul cozii
while(B<=E && a[q[E]]>=a[i])
E--;
/// adauga ultima valoare
q[++E]=i;
/// daca primul element din coada nu mai fac parte din secventa curenta se elimina
if(i-q[B]==k)
B++;
/// minimul secventei curente este primul din coada
sol+=a[q[B]];
}
g<<sol<<'\n';
return 0;
}