Pagini recente » Cod sursa (job #1902095) | Cod sursa (job #559891) | Cod sursa (job #293591) | Cod sursa (job #1833469) | Cod sursa (job #321845)
Cod sursa(job #321845)
#include <stdio.h>
#define Nmax 5000005
long a[Nmax],deq[Nmax],poz[Nmax];
long nd,z,n,k,i;
long long sum=0;
int main(){
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%ld%ld",&n,&k);
for(i=1;i<=n;++i) scanf("%ld",&a[i]);
deq[++nd]=a[1]; poz[nd]=1;
z=1;
for(i=2;i<k;++i)
if(a[i]>= deq[nd]) deq[++nd]=a[i],poz[nd]=i;
else{
while(a[i] < deq[nd] && nd>=z) --nd;
deq[++nd] =a[i],poz[nd]=i;
}
for(i=k;i<=n;++i){
if(a[i]>= deq[nd]) deq[++nd]=a[i],poz[nd]=i;
else{
while(a[i] < deq[nd] && nd>=z) --nd;
deq[++nd] =a[i],poz[nd]=i;
}
while(poz[z]< i-k+1) z++;
sum += deq[z];
}
printf("%lld\n",sum);
fclose(stdin); fclose(stdout);
return 0;
}