输入时序列中的每个数都乘 $1000$,再整数二分即可
$\texttt{check}$ 部分看其他题解的吧
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+1;
ll b[N],f[N];
int n,m,a[N];
int read() {
int x=0; char c=0; while (!isdigit(c) ) c=getchar();
while (isdigit(c) ) x=(x<<3)+(x<<1)+(c&15),c=getchar();
return x;
}
bool check(int x)
{
for (int i=1;i<=n;i++) b[i]=b[i-1]+a[i]-x;
for (int i=1;i<=n;i++) f[i]=min(f[i-1],b[i]);
for (int i=m;i<=n;i++) if (b[i]>=f[i-m]) return true;
return false;
}
int main()
{
n=read(),m=read();
for (int i=1;i<=n;i++) a[i]=read()*1000;
int l=1,r=2e6;
while (l<=r) {
int mid=(l+r)>>1;
if (check(mid) ) l=mid+1;
else r=mid-1;
}
printf("%d",r);
return 0;
}