Pagini recente » Cod sursa (job #699751) | Cod sursa (job #1884286) | Sport2 | Cod sursa (job #735253) | Cod sursa (job #1176067)
#include <cstdio>
using namespace std;
char buffer[5000000*10];
struct deq
{
int min,pos;
} v[1000000];
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
int n,k,i,r,u,j=0,minim=10000000,vf=0,semn,vf1=0;
long long sol=0;
scanf("%d %d\n",&n,&k);
v[vf1].min=minim;v[vf1].pos=0;
fread(buffer,10,5000000*10,stdin);
for(i=0;i<k;i++)
{ r=0;
semn=1;
while(buffer[j]!='\n')
{ if(buffer[j]=='-') semn=-1,j++;
r=r*10+buffer[j]-'0';
j++;
}
if(semn==-1) r=-r;
j++;
for(u=vf1;u>=vf;u--)
{
if(r<v[u].min&&u<vf1) v[u].min=r,v[u].pos=i,vf1=u;
else if(r<v[u].min&&u==vf1) v[vf1].min=r,v[u].pos=i;
}
if(v[vf1].min!=r) v[++vf1].min=r,v[vf1].pos=i;
}
sol=v[vf].min;
for(;i<n;i++)
{
r=0;
semn=1;
while(buffer[j]!='\n')
{ if(buffer[j]=='-') semn=-1,j++;
r=r*10+buffer[j]-'0';
j++;
}
if(semn==-1) r=-r;
j++;
for(u=vf;u<=vf1;u++) {if(v[u].pos<=i-k) vf++;else break;}
for(u=vf1;u>=vf;u--)
{
if(r<v[u].min&&u<vf1) v[u].min=r,v[u].pos=i,vf1=u;
else if(r<v[u].min&&u==vf1) v[vf1].min=r,v[u].pos=i;
}
if(v[vf1].min!=r) v[++vf1].min=r,v[vf1].pos=i;
sol+=v[vf].min;
}
printf("%lld",sol);
}