T1题解
算法1
考虑预处理字符串‘0’,'1'个数的前缀和。
询问时枚举左端点和右端点,根据预处理的前缀和计算价值。
时间复杂度
算法2
设前缀‘0’的数量为
则区间
设
对于固定的右端点
一遍扫过去即可。
时间复杂度
注意特判
code:
#include<bits/stdc++.h>
#define For(i,j,k) for (int i=(int)(j);i<=(int)(k);i++)
#define Rep(i,j,k) for (int i=(int)(j);i>=(int)(k);i--)
#define ll long long
using namespace std;
const int N=100005;
char s[N];
int n,S,mx,ans;
int main(){
scanf("%s",s+1);
n=strlen(s+1);
S=mx=0; ans=-1;
For(i,1,n){
S+=(s[i]=='0'?1:-1);
ans=max(ans,S-mx);
mx=min(mx,S);
}
printf("%d",ans);
}