正题
题目大意
一个01串,求最长的子串使得0和1都相等。
解题思路
维护差分数组zzz,vi=xv_i=xvi=x表示iii最早出现在差分数组的那个数字。枚举尾部,用viv_ivi
codecodecode
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100010
using namespace std;
int n,z[N],v[2*N],ans;
int main()
{scanf("%d",&n);memset(v,-1,sizeof(v));v[n]=0;for(int i=1;i<=n;i++){int x;scanf("%d",&x);z[i]=z[i-1]+x*2-1;if(v[z[i]+n]>=0)ans=max(ans,i-v[z[i]+n]);else v[z[i]+n]=i;}printf("%d",ans);
}