56分求助
  • 板块P1404 平均数
  • 楼主ran_Diana
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/1/24 15:21
  • 上次更新2023/10/28 11:18:54
查看原帖
56分求助
592681
ran_Diana楼主2022/1/24 15:21

总是超时,可以给一点改良意见吗

#include<bits/stdc++.h>
#include<math.h>
using namespace std;
const long long N=1e6;
long long n,m,l=1e6,r=-1;
long long a[N],s[N];
long long f(long long mid)
{
	for(long long i=1;i<=n;i++)
		s[i]=s[i-1]+(a[i]*10000-mid);
	long long minn=1e6,maxn=-1e6;
	for(long long i=m;i<=n;i++)
	{
		minn=min(minn,s[i-m]);
		maxn=max(maxn,s[i]-minn);
	}
	return maxn>=0;
} 
int main()
{
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
		l=min(l,a[i]*10000);
		r=max(r,a[i]*10000);
	}
	while(r-l>=1e-6)
	{
		long long mid=(l+r)/2;
		if(f(mid)) l=l+1;
		else r=mid-1;
	}
	cout<<l/10;
}
2022/1/24 15:21
加载中...