#P5535. String
String
Description
对于一个01串s,定义函数f(s)为s每一位的异或和,例如f(111)=1,f(110)=0,f(101)=0,f(100)=1。
一个01串s是好串,当且仅当其满足以下条件:
串的长度为2的幂次方。
存在两个非负整数x,b,使得i[0,|s|-1],si=f(i and x)xorb
(下标从0开始,此处f函数计算的是i and x对应的二进制串的值)。
现对于一个01串,可以使用区间取反操作,即选定一个区间[l,r],0<=l<=r<|s|,
并将[l,r]中的每一位取反(即1->0,0->1)。
现在给出一个长度为n的01串s,q次询问子串sl,r最少经过多少次区间取反操作变成好串
Input Format
第一行包含一个整数n。
第二行包含一个长为n的01串s。
第三行包含一个整数q。
接下来q行每行两个整数表示l,r。保证子串的长度为2的幂次方,且下标从0开始。
n,q<=5000
Output Format
输出q行,对于每个询问输出对应的答案
8
00000101
3
0 7
2 5
0 3
2
1
0