@[chaizechen_czc](/user/877062) 将 $ 0$ 变为 $-1$ ,然后开桶数组, `buc[i]` 表示第一次和达到 $i$ 的位置,如果下次达到了就取 $\max$ 然后就可以实现 $O(n)$ 记录。
Tip: 实现时,桶开两倍,每次 $+n$ 即可防止负数。
by liuenyin @ 2023-08-29 14:33:02
$谢谢大佬指导$
by chaizechen_czc @ 2023-08-29 16:23:28
```
#include <iostream>
#include<cstdio>
#include<map>
using namespace std;
int n,maxn,sum;
map<int,int> mp1,mp2;
signed main() {
cin>>n;
mp1[0]=0;
mp2[0]=0;
for(int i=1;i<=n;++i)
{
int x;
scanf("%d",&x);
if(x)++sum;
else --sum;
mp1.insert(pair<int,int>(sum,i));
mp2[sum]=i;
}
for(int i=-n;i<=n;++i)
maxn=max(mp2[i]-mp1[i],maxn);
cout<<maxn;
return 0;
}
```
用map也行
by 2672434062xzl @ 2023-09-08 23:08:04