Pagini recente » Cod sursa (job #76725) | Cod sursa (job #1662769) | Cod sursa (job #424484) | Cod sursa (job #136053) | Cod sursa (job #602024)
Cod sursa(job #602024)
using namespace std;
#include<stdio.h>
const int N=5000002;
int st=1,dr=0,d[N];
long long n,k,v[N],s;
void stanga( int i)
{
if(d[st]==i-k)
++st;
}
void dreapta ( int ii)
{
//printf("ii = %d\n",ii);
while(st<=dr && v[d[dr]]>=v[ii])
{
if(v[d[dr]]<v[ii])
break;
//printf("st=%d, dr=%d\n",st,dr);
//printf("elimin %d din cauza lui v[%d] = %d\n",v[d[dr]],ii,v[ii]);
--dr;
}
d[++dr]=ii;
}
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;++i)
scanf("%lld",&v[i]);
for(int i=1 ; i<k ; i++)
{
//printf("i = %d\n",i);
dreapta(i);
//printf("min = %d\n",v[d[st]]);
}
for(int i=k ; i<=n ; i++)
{
stanga(i);
dreapta(i);
//printf("min = %d\n",v[d[st]]);
s += v[d[st]];
}
printf("%lld", s);
return 0;
}