死了。
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,q,f[N],g[N],pos[N];string s;
vector<int>vec;
int main()
{
cin>>n>>q>>s;
s="%"+s;vec.push_back(-1);
for(int i=1;i<=n;i++)
{
f[i]=f[i-1];g[i]=g[i-1];
if(s[i]=='/')
{
pos[i]=vec.size();
vec.push_back(i);
}
if(s[i]=='1')f[i]++;
if(s[i]=='2')g[i]++;
}
for(int i=1,l,r,L,R,ll,rr,mid,ans,t,as;i<=q;i++)
{
cin>>l>>r;
if(f[r]-f[l-1]+g[r]-g[l-1]==r-l+1)
{
cout<<"0\n";
continue;
}
L=*lower_bound(vec.begin(),vec.end(),l);
R=*(upper_bound(vec.begin(),vec.end(),r)-1);
// cout<<L<<' '<<R<<'\n';
ll=pos[L];rr=pos[R];ans=-1;
while(ll<rr)
{
// cout<<ll<<' '<<rr<<' '<<mid<<'\n';
mid=ll+rr>>1;
t=vec[mid];
if(f[t]-f[l-1]-g[r]+g[t-1]>0){rr=mid-1;ans=mid;}
else ll=mid+1;
}
if(ll==rr)ans=ll;
if(ans==-1)as=min(f[R]-f[l-1],g[r]-g[R-1]);
else if(ans==ll)as=min(f[L]-f[l-1],g[r]-g[L-1]);
else
{
t=vec[ans];
as=min(f[t]-f[l-1],g[r]-g[t-1]);
t=vec[ans-1];
as=max(as,min(f[t]-f[l-1],g[r]-g[t-1]));
}
cout<<as*2+1<<'\n';
}
}