#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=301000; int a[N],sum[N]; int Q[N],I[N];//最小单调队列 int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum[i]=sum[i-1]+a[i];} int head=0,tail=-1; int _max=(1<<31); for(int j=1;j<=n;j++)//sum[j]-sum[i-1]的最大值 { int i=j-1;//sum[j-1]入队 while(head<=tail&&Q[tail]>=sum[i]) tail--; tail++; Q[tail]=sum[i],I[tail]=i; i=j-m-1;//sum[i]出队 while(head<=tail&&I[head]<=i) head++; int _res=sum[j]-Q[head]; if(_res>_max) _max=_res; } printf("%d/n",_max); } return 0; }