萌新刚学OI,在学习一篇题解时遇到了问题,请各位大佬帮个忙
题解代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100010;
long long n,m,Max;
long long a[N],s[N];//为了防止各种越界,全部开longlong
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++) {
cin>>a[i];
a[i]=a[i]*10000;//因为答案要*1000并且舍弃小数 所以可以把原数列的每一项*10000 最后得到的答案/10就好
Max=max(Max,a[i]);//Max为可能的最大平均值
}
int l=0,r=Max;
while (l<=r) {
bool ok=0;
long long mid=(l+r)/2,Min=0;
for (int i=1;i<=n;i++) {
s[i]=s[i-1]+(a[i]-mid); //s[i]为a[i]减掉mid之后的前缀和
if (i>=m) {
Min=min(Min,s[i-m]);
if (s[i]>Min) { //判断是否平均值能>=mid
ok=1;
break;
}
}
}
if (ok) l=mid+1;
else r=mid-1;
}
cout<<(l/10)<<endl;
return 0;
}
没搞明白 Min=min(Min,s[i-m]);if (s[i]>Min)
这句的意思,有哪位大佬能帮我一下吗