50,796
社区成员
发帖
与我相关
我的任务
分享
void solve() {
int n;
cin>>n;
a[0]=ans[0]=0;
bit[0].init(n);
bit[1].init(n);
for(int i=1; i<=n; i++)
{
cin>>a[i];
a[i]+=a[i-1];
mp[i]=a[i];
}
mp[n+1]=0;
sort(mp+1,mp+n+2);
unique(mp+1,mp+n+2);
for(int i=0; i<=n; i++)
{
a[i]=lower_bound(mp+1,mp+n+2,a[i])-mp;
}
bit[0].add(a[0],0);
bit[1].add(a[0],0);
for(int i=1;i<=n;i++){
ans[i]=ans[i-1]-1;
ans[i]=max(ans[i],i+bit[0].get(a[i]-1));
ans[i]=max(ans[i],bit[1].get(a[i]));
bit[0].add(a[i],ans[i]-i);
bit[1].add(a[i],ans[i]);
}
cout<<ans[n]<<endl;
}