NC26251. 小阳买水果
描述
输入描述
第一行输入一个正整数 n,表示水果总数。
第二行输入 n 个整数 ,表示小阳对每个水果的喜爱程度。
输出描述
一行一个整数表示结果。(如果 1 个水果都买不了,请输出 0)
示例1
输入:
5 0 0 -7 -6 1
输出:
1
C++ 解法, 执行用时: 357ms, 内存消耗: 8260K, 提交时间: 2021-10-31 18:53:04
#include<bits/stdc++.h> using namespace std; int main() { int a[2000001],n,sum=0,ans=-0x3f3f3f3f,t; scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&t); sum+=t; a[i]=min(a[i-1],sum); int l=0,r=i-1,mid; while(l<=r) { mid=(l+r)>>1; if(a[mid]<sum) r=mid-1; else l=mid+1; } if(r!=-2) ans=max(ans,i-r-1); } printf("%d\n",ans); }
C++14(g++5.4) 解法, 执行用时: 368ms, 内存消耗: 8300K, 提交时间: 2019-07-13 09:05:39
#include<bits/stdc++.h> using namespace std; int a[2000061],s,x,ans; int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&x); s+=x; a[i]=min(a[i-1],s); int l=0,r=i-1,k=-1; while(l<=r){ int mid=(l+r)>>1; if(a[mid]<s){ r=mid-1; }else l=mid+1; } if(r!=-2){ ans=max(ans,i-r-1); } } cout<<ans<<endl; }