Pagini recente » Cod sursa (job #1052225) | Cod sursa (job #373312) | Cod sursa (job #2852476) | Cod sursa (job #741366) | Cod sursa (job #1751792)
#include <stdio.h>
using namespace std;
int v[5000005];
int deq[5000005];
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
int n,k,i,p,u,a,poz,len,m=-1000000,deltapoz,pozfin;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",v+i);
p=1;u=0;
//pt deque
int sum=0;
/*
for(i=1;i<=k;i++)
{
a=v[i];
while(p<=u&&v[deq[u]]>a)
u--;
deq[++u]=i;
}
for(i=k+1;i<=n;i++)
{
a=v[i];
while(p<=u&&v[deq[u]]>a)
u--;
deq[++u]=i;
if(i-deq[p]>=k) p++;
if(m<v[deq[p]])
{
m=v[deq[p]];
poz=deq[p]; // i sau deq[p]
}
}
for(i=poz-1;v[i]>m;i--);
deltapoz=poz-i;
if(k<deltapoz) pozfin=poz;
else pozfin=poz+k-deltapoz;
printf("%d %d %d",i+1,pozfin,m);
//printf("%d %d %d",poz-k+1,poz,m);
*/
for(i=1;i<=k;i++)
{
a=v[i];
while(p<=u&&v[deq[u]]>a)
u--;
deq[++u]=i;
}
sum+=v[deq[p]];
for(i=k+1;i<=n;i++)
{
a=v[i];
while(p<=u&&v[deq[u]]>a)
u--;
deq[++u]=i;
if(i-deq[p]>=k) p++;
sum+=v[deq[p]];
}
printf("%d",sum);
return 0;
}