Pagini recente » Cod sursa (job #1648381) | Cod sursa (job #3129629) | Cod sursa (job #1817508) | Cod sursa (job #1652765) | Cod sursa (job #1725302)
#include <cstdio>
#include <algorithm>
#define MAX 56000000
using namespace std;
char f[MAX];
int pos=0,N,K,X,Deque[5000005],v[5000005],Front=1,Back=0,DequeSize=0;
long long S;
void r(int &nr)
{
int sign=0;
nr=0;
while(f[pos]<'0'||f[pos]>'9')
{
pos++;
if(f[pos]=='-')
sign=1;
}
while(f[pos]>='0'&&f[pos]<='9')
nr=nr*10+f[pos++]-'0';
if(sign==1)
nr=-nr;
}
int DequeFront()
{
return Deque[Front];
}
int DequeBack()
{
return Deque[Back];
}
void AddToBack(int val)
{
Deque[++Back]=val;
DequeSize++;
}
void RemoveFromBack()
{
Back--;
DequeSize--;
}
void RemoveFromFront()
{
Front++;
DequeSize--;
}
int main()
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
//fread(f,1,MAX,stdin);
scanf("%d%d",&N,&K);
for(int i=1;i<=N;i++)
{
scanf("%d",&v[i]);
while(DequeSize>0&&v[DequeBack()]>=v[i]) RemoveFromBack();
AddToBack(i);
if(DequeFront()==i-K)
RemoveFromFront();
if(i>=K)S+=v[DequeFront()];
}
printf("%lld",S);
return 0;
}