看到小数,想一下可不可以二分,如果二分怎么判断。
让每个值去减mid,找到一个正值的段落即可,如果没有l和r的限制,f[i]=max(f[i-1],0)+a[i]-mid即可。但由于l和r,可以使用单调队列,最小的最优,使你所求的区间最大。
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,s,t,a[200007],maxx=-999999,minn=999999;
double sum[200007];
int judge(double mid)
{
for(int i=1;i<=n;++i)
sum[i]=sum[i-1]+double(a[i])-mid;
int q[200007],hea