Media máxima (dos puntos)

Media máxima

Inserte la descripción de la imagen aquí

Ideas para resolver problemas

Respuesta de dos puntos
Puede restar el valor de dos puntos de cada número en la secuencia. La
pregunta es
si hay un subsegmento cuya longitud no sea menor que L y el valor promedio no sea menor que medio.

Código AC

#include<cstdio>
#include<algorithm>
using namespace std;
int n,L;
double l=-1000000,r=1000000,a[100005],b[100005],sum[100005];
bool check(double x)//判断
{
    
    
	for(int i=1;i<=n;i++)b[i]=a[i]-x,sum[i]=sum[i-1]+b[i];
	double ans=-2147483647,mmin=2147483647;
	for(int i=L;i<=n;i++)
	{
    
    
		mmin=min(mmin,sum[i-L]);
		ans=max(ans,sum[i]-mmin);
	}
	return ans>=0;
}
int main()
{
    
    
	scanf("%d%d",&n,&L);
	for(int i=1;i<=n;i++)
	 scanf("%lf",&a[i]);
	while(l+1e-5<r)//二分
	{
    
    
		double mid=(l+r)/2;
		if(check(mid))l=mid;else r=mid;
	}
	printf("%d",int(r*1000));
	return 0;
}

Gracias

Supongo que te gusta

Origin blog.csdn.net/weixin_45524309/article/details/112387997
Recomendado
Clasificación