用二分去做WA了一个点……会不会是二分本身思路就有问题呢?
#include <bits/stdc++.h>
using namespace std;
const int MAXN=3e5+10;
#define int long long
int n,a,b,c,s[MAXN],sum[MAXN];
bool cheak(int mid)
{
for(int i=1;i<=n-mid+1;i++)
{
int j=mid+i-1;
if(sum[j]-sum[i-1]>a*(b*j-c*i)) return true;
}
return false;
}
signed main()
{
scanf("%lld %lld %lld %lld",&n,&a,&b,&c);
for(int i=1;i<=n;i++)
{
scanf("%lld",&s[i]);
sum[i]=sum[i-1]+s[i];
}
int l=0,r=n;
while(l<r-1)
{
int mid=(l+r)>>1;
if(cheak(mid)) l=mid;
else r=mid;
}
printf("%lld",l);
return 0;
}
提交记录……