思路首先数组某个连续区间想到用前缀和;
要找到最大的区间就可以使用二分法找到想要的最大值
范围就是left=1 right= 2000
最大值只能在这个区间上
然后在确定check函数如何写
前缀和每次都减去一个avg这样只需要判断前缀和sum是否大于等于0
如图所示得到前缀和sum以后我们确定第一个区间就是【1,m】,所以j=m开始然后我们 我们要使以i结尾的区间和尽可能小这样就可以保证当间隔大于等于f时sum【j】-sum【i】的值最大 ,所以用minv计入最小值只要有一个j成立那么就可以直接返回true 如果循环还没找到就不满足返回false
#include<iostream>
#include<algorithm>
using namespace std;
const int n=1e5+10;
double a[n];
double sum[n];
int m;
int f;
bool check (double avg)
{
for(int i=1;i<=m;i++)
sum[