BZPRO
#5535. String
内存限制:512 MiB
时间限制:5 Sec
提交
提交记录
讨论
题目描述
对于一个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最少经过多少次区间取反操作变成好串
输入格式
第一行包含一个整数n。
第二行包含一个长为n的01串s。
第三行包含一个整数q。
接下来q行每行两个整数表示l,r。保证子串的长度为2的幂次方,且下标从0开始。
n,q≤5000
输出格式
输出q行,对于每个询问输出对应的答案
样例
样例输入
8
00000101
3
0 7
2 5
0 3
样例输出
2
1
0
数据范围与提示