Media máxima
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;
}