https://codeforces.com/problemset/problem/279/B
这道题我的想法是用一个前缀和数组维护下读到第 i 本书所需的总时间,然后对于每一本书,
我们对它从 i 到 n 这个区间查找总时间小于等于 t 的书共有几本书,这个查找过程我们可以用二分实现
这样总的时间复杂度就为 O(nlogn) 以下为代码实现
#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll a[N],s[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
}
int ans=0;
for(int i=1;i<=n;i++)
{
int l=i,r=n,mid=0,cnt=0;
while(l<=r)
{
mid=(l+r)/2;
if(s[mid]-s[i-1]<=t)//小了,再找找有没有更大的
{
l=mid+1;
cnt=mid-i+1;
}
else//大了,找找有没有更小的
{
r=mid-1;
}
}
ans=max(ans,cnt);
}
cout<<ans;
return 0;
}