Pagini recente » Borderou de evaluare (job #1900361) | Borderou de evaluare (job #1460900) | Borderou de evaluare (job #1848872) | Borderou de evaluare (job #355544) | Cod sursa (job #428062)
Cod sursa(job #428062)
#include<cstdio>
int n,k,pi,pf,st,dr,max,dq[1<<16],s[1<<16];
void elimst(int poz)
{
if(poz-dq[st]==k)
++st;
}
void elimdr(int poz)
{
while(st<=dr && s[dq[dr]]>=s[poz])
dr--;
dq[++dr]=poz;
}
int main()
{
freopen("secv2.in","r",stdin);
freopen("secv2.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
int x=0;
scanf("%d",&x);
s[i]=s[i-1]+x;
}
dq[1]=1;
st=dr=1;
max=s[1+k]-s[1];
pi=dq[1]+1;
pf=1+k;
int i=0;
for(i=2;i<=n-k;i++)
{
//elimst(i);
elimdr(i);
if(s[i+k]-s[dq[st]]>max)
{
max=s[i+k]-s[dq[st]];
pi=dq[st]+1;
pf=i+k;
}
}
if(n==k)
{
printf("%d %d %d",1,n,s[n]);
return 0;
}
printf("%d %d %d",pi,pf,max);
return 0;
}