U531625 好串

题目背景

### 题目描述 对于一个 01 串 $s$,定义函数 $f(s)$ 为 $s$ 每一位的异或和,例如 $f(111) = 1, f(110) = 0, f(101) = 0, f(100) = 1$。 一个 01 串 $s$ 是好串,当且仅当其满足以下条件: 1、串的长度为 $2$ 的幂次方。 2、存在两个整数 $x\in N, b\in\{0,1\}$,使得 $∀i ∈ [0, |s| − 1], s_i = f(i\& x)\oplus b$( $s$ 下标从 0 开始,$\&,\oplus$ 分别为二进制下的与、异或运算)。 现在给出一个长度为 $n$ 的 01 串 $s$,$q$ 次询问子串 $s[l,r]$:最少经过多少次区间取反操作可以将 $s[l,r]$ 变成好串。 区间取反操作:即选定一个区间 $[l, r], 1 ≤ l ≤ r ≤ |s|$, 并将 $[l, r]$ 中的每一位取反($1 → 0, 0 → 1$)。 ### 输入格式 第一行包含一个整数 $n$。 第二行包含一个长为 $n$ 的 01 串 $s$。 第三行包含一个整数 $q$。 接下来 $q$ 行每行两个整数表示 $l, r$。保证子串的长度为 $2$ 的幂次方。 子串下标从 $0$ 开始。 ### 输出格式 输出 $q$ 行,对于每个询问输出对应的答案。 ### 样例 #### 1.in 8 00000101 3 0 7 2 5 0 3 #### 1.out 2 1 0 #### 2.in 见下发文件 #### 2.out 见下发文件 ### 数据范围 共 $25$ 个测试点。 测试点 $1—5$ :满足 $n, q ≤ 8$; 测试点 $6—10$: $n, q ≤ 16$,分值 $20$ 分。 测试点 $11—19$: 满足 $n, q ≤ 5000$,分值 50 分。 对于所有数据,均满足 $n, q ≤ 2\times10^5$。

题目描述

无

输入格式

无

输出格式

无