扔链接跑
处理出来i之前的最大的dis,i之后的最大的dis,然后 if((min_aft[i]-dis[i-1]>=0)&&(min_dis[i-1]+dis[n]-dis[i-1]>=0))
#include <iostream>
#include <cstdio>
using namespace std;
long long dis[1000010],a[1000010],min_dis[1000010],min_aft[1000010];
int main()
{
long long n,tot=0;
cin>>n;
min_dis[0]=1e17;
min_aft[n+1]=1e17;
for(long long i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
dis[i]=dis[i-1]+a[i];
min_dis[i]=min(min_dis[i-1],dis[i]);
}
for(long long i=n;i>=1;i--)
min_aft[i]=min(min_aft[i+1],dis[i]);
for(long long i=1;i<=n;i++)
{
if((min_aft[i]-dis[i-1]>=0)&&(min_dis[i-1]+dis[n]-dis[i-1]>=0))
tot++;
}
cout<<tot<<endl;
return 0;
}