Pagini recente » Cod sursa (job #3234727) | Cod sursa (job #3278683) | Cod sursa (job #3142518) | Cod sursa (job #44062) | Cod sursa (job #235773)
Cod sursa(job #235773)
//deque
#include <cstdio>
#include <string>
#define dim 8192
#define N 5000001
char ax[dim];
int pz;
inline void cit(int &x)
{
x=0;
while((ax[pz]<'0' || ax[pz]>'9') && ax[pz]!='-')
if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
int neg=0;
if(ax[pz]=='-')
{
neg=1;
if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
}
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
}
if(neg) x=-x;
}
int a[N], dq[N];
int p=1, q=0;
int n, K;
inline void insert(int i)
{
while(p<=q && a[i] <= a[dq[q]]) --q;
dq[++q]=i;
}
inline int query(int i)
{
while(p<=q && dq[p] <= i) ++p;
return a[dq[p]];
}
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
cit(n); cit(K);
int i, j;
long long sol=0;
for(i=1;i<=n;++i) cit(a[i]);
for(i=1;i<=n;++i)
{
//while(p<=q && a[i] <= a[dq[q]]) --q;
//dq[++q]=i;
insert(i);
//if(dq[p] == i-K) ++p;
if(i>=K) sol+=query(i-K);//a[dq[p]];
}
printf("%lld\n", sol);
return 0;
}