class DoublingDP: def __init__(self, xs: list, f0, op, nb=60): size = len(xs) doubling = [[0] * size for _ in range(nb)] dp = [[0] * size for _ in range(nb)] for i in range(size): doubling[0][i] = xs[i] dp[0][i] = f0(i) for k in range(nb-1): for i in range(size): doubling[k+1][i] = doubling[k][doubling[k][i]] dp[k+1][i] = op(dp[k][i], dp[k][doubling[k][i]]) self.nb = nb self.doubling = doubling self.dp = dp self.op = op def query(self, k: int, start: int, init): cur = start val = init for i in range(self.nb): if k & (1 << i): val = self.op(val, self.dp[i][cur]) cur = self.doubling[i][cur] return cur, val def f(p: int) -> int: return A[p] def op(a, b): return a + b N = int(input()) A = list(map(int, input().split())) xs = [(i + A[i]) % N for i in range(N)] d = DoublingDP(xs, f, op) Q = int(input()) for _ in range(Q): K = int(input()) _, val = d.query(K, 0, 0) print(val)