#include <iostream>
#include <unordered_map>
using namespace std;
int n,presum,a[100005],st,ma;
unordered_map<int,int>hmap;
int main() {
    cin>>n;
    for(int i=0;i<n;i++){
        int t;
        scanf("%d",&t);
        if(t>0)a[i]=1;//正负转化为1,-1,正数与负数个数相等转化为和为0
        else if(t<0)a[i]=-1;
        else a[i]=0;
    }
    hmap.insert({0, -1});
    for(int i=0;i<n;i++){
        presum+=a[i];
        if(hmap.find(presum)!=hmap.end()){
            st=hmap[presum];
        ma=max(ma,i-st);
        }
        else hmap.insert({presum,i});
    }
    cout<<ma;
}

题目4【算法讲解046【必备】构建前缀信息的技巧-解决子数组相关问题】 https://www.bilibili.com/video/BV1Sj411q7fi/?share_source=copy_web&vd_source=5065fa61022691e8df35c771a30e6d29