Pagini recente » Cod sursa (job #290836) | Cod sursa (job #2080830) | Cod sursa (job #2271890) | Cod sursa (job #371184)
Cod sursa(job #371184)
#include<cstdio>
#define Maxn 5000010
using namespace std;
int i,n,k,front,back,a[Maxn],deque[Maxn];
long long s;
int main ()
{
freopen("deque.in", "r" , stdin);
freopen("deque.out", "w" ,stdout);
scanf("%d %d" , &n , &k); //citire n si k;
s=0;
for(i=1;i<=n;i++)
scanf("%d" , &a[i]); //citire vector
front=1;
back=0;
for(i=1;i<=n;i++)
{
while(front <= back && a[i] <= a[deque [back] ]) //cat timp elementul de pe pozitia i este mai mic decat cel de pe ultima pozitie in deque scad back;
back--;
deque[++back]=i; //crestem back-ul si adaugam pe pozitia acestuia valoarea lui i
if(deque[front]==i-k)
front++; //daca pozitia minimului este egala cu i-k il eliminam pentru ca nu mai conteaza pentru numerele >=i;
if(i>=k)
s+=a[deque[front]]; //adaugam la suma minimul ;
}
printf("%lld\n" , s);
return 0;
}