n = int(input()) S = input().strip() v = [0] * (n + 2) # 1-based索引 for i in range(1, n + 1): v[i] = int(S[i - 1]) h = [0] * (n + 2) s = [0] * (n + 2) hh = [0] * (n + 2) la = [0] * (n + 2) # 处理到n+1 ss = [0] * (n + 2) pre = 0 current_sum = 0 for i in range(1, n + 1): if v[i]: current_sum += pre + 1 pre = 0 else: pre += 1 h[i] = s[i] = current_sum hh[i] = pre # 计算前缀和s和ss for i in range(1, n + 1): s[i] += s[i - 1] ss[i] = v[i] + ss[i - 1] # 预处理la数组 for i in range(n, 0, -1): if v[i]: la[i] = i else: la[i] = la[i + 1] q = int(input()) for _ in range(q): l, r = map(int, input().split()) # 处理原代码中的边界条件 ans = s[r] - s[l - 1] - (r - l + 1) * (h[l] - v[l]) # 检查la[l-1]是否有效 if la[l - 1] != l: # 当la[l-1]为0时表示没有前面的1,可能不需要处理 # 原代码中直接减去,但要注意hh[l-1]的访问是否越界 if la[l - 1] != 0 and l - 1 <= n: # 防止越界 ans -= (r - la[l - 1] + 1) * hh[l - 1] if ss[r] - ss[l - 1] != 0: print(ans) else: print(0)