TP
考虑到
"
(
,
[
"
"(,["
"(,[" 等全部都可以自由翻转,那么只用考虑这个区间内多少
"
[
"
"["
"[" 或者
"
]
"
"]"
"]" 无法配对,那么我们考虑到两个奇数的
"
[
"
"["
"[" 或者
"
]
"
"]"
"]" 无法配对,只能奇数位置的和偶数位置的配对,不然中间的个数是奇数个,没法配对,这个时候就需要一个
"
(
"
"("
"("
o
r
or
or
"
)
"
")"
")" 来转换,那么前缀和处理即可
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int readint(){
int x=0,f=1;char s=getchar();
#define sc (s=getchar())
while(s<'0'||s>'9'){
if(s=='-')
f=-1;
sc;
}
while(s>='0'&&s<='9'){
x=(x<<3)+(x<<1)+(s^48);
sc;
}
#undef sc
return x*f;
}
int Fabs(int x){
if(x<0)
x=-x;
return x;
}
char s[maxn];
int pre[maxn];
int main (){
int t=readint();
while(t--){
scanf("%s",s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++){
pre[i]=pre[i-1];
if(s[i]=='['||s[i]==']')
pre[i]+=(i%2?1:-1);
}
int q=readint();
while(q--){
int l=readint(),r=readint();
printf("%d\n",Fabs(pre[r]-pre[l-1]));
}
}
return 0;
}