为什么二分为wa两个点
~~~
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define fi first
#define se second
#define all(_a) _a.begin(), _a.end()
typedef pair<int,int> PII;
const int N=1e6+10;
int n;
int sb[N],qz[N],hz[N],cnt[N];
deque<int> nb;
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>sb[i];
for(int i=1;i<=n;i++) qz[i]=qz[i-1]+sb[i];
for(int i=n;i>0;i--) hz[i]=hz[i+1]+sb[i];
for(int i=1;i<=n;i++)
{
if(sb[i]>0) cnt[i]=cnt[i-1]+1;
else cnt[i]=cnt[i-1];
}
if(qz[n]%3!=0)
{
cout<<0<<endl;
return ;
}
int hh=qz[n]/3;
int ans=0;
for(int i=n;i>0;i--)
{
if(qz[i]==hh&&cnt[i]>0){
int hh=upper_bound(nb.begin(),nb.end(),cnt[i])-nb.begin();
ans+=nb.size()-hh;}
if(cnt[n]-cnt[i-1]>0&&hz[i]==hh)
{
nb.push_front(cnt[i]);
}
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int T;
T=1;
while(T--)solve();
return 0;
}
~~~