看之前与他的前缀和相等的第一个。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1e5+10;
int pre[N<<1];
int a[N],q[N];
int n,ans;
int main ()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++)
scanf ("%d",&a[i]),a[i]=!a[i]?-1:1,q[i]=q[i-1]+a[i];
for (int i=0;i<=n;i++)
pre[i]=pre[i+n]=n+1;
for (int i=1;i<=n;i++)
{
ans=max(ans,i-pre[q[i]+n]);
if (pre[q[i]+n]==n+1)
pre[q[i]+n]=i;
}
printf ("%d",ans);
return 0;
}