#include #include #include #include #include #include template inline bool chmin(T &lhs, const U &rhs) { if (lhs > rhs) { lhs = rhs; return true; } return false; } template inline bool chmax(T &lhs, const U &rhs) { if (lhs < rhs) { lhs = rhs; return true; } return false; } struct range { using itr = int64_t; struct iterator { itr i; constexpr iterator(itr i_) noexcept : i(i_) { } constexpr void operator ++ () noexcept { ++i; } constexpr itr operator * () const noexcept { return i; } constexpr bool operator != (iterator x) const noexcept { return i != x.i; } }; const iterator l, r; constexpr range(itr l_, itr r_) noexcept : l(l_), r(std::max(l_, r_)) { } constexpr iterator begin() const noexcept { return l; } constexpr iterator end() const noexcept { return r; } }; struct revrange { using itr = int64_t; struct iterator { itr i; constexpr iterator(itr i_) noexcept : i(i_) { } constexpr void operator ++ () noexcept { --i; } constexpr itr operator * () const noexcept { return i; } constexpr bool operator != (iterator x) const noexcept { return i != x.i; } }; const iterator l, r; constexpr revrange(itr l_, itr r_) noexcept : l(l_ - 1), r(std::max(l_, r_) - 1) { } constexpr iterator begin() const noexcept { return r; } constexpr iterator end() const noexcept { return l; } }; using i32 = int32_t; using i64 = int64_t; using u32 = uint32_t; using u64 = uint64_t; constexpr i32 inf32 = (i32(1) << 30) - 1; constexpr i64 inf64 = (i64(1) << 62) - 1; int main() { i32 N; std::cin >> N; std::vector A(N); for (auto &x: A) { std::cin >> x; } std::vector to(N); for (auto i: range(0, N)) { to[i] = (i + A[i]) % N; } std::vector branch, loop; branch.push_back(0); { std::vector done(N); i32 cur = 0; while (true) { done[cur] = true; branch.push_back(branch.back() + A[cur]); cur = to[cur]; if (done[cur]) { i32 pos = cur; loop.push_back(0); while (true) { loop.push_back(loop.back() + A[pos]); pos = to[pos]; if (pos == cur) { break; } } break; } } } i32 Q; std::cin >> Q; while (Q--) { i64 K; std::cin >> K; if (K < branch.size()) { std::cout << branch[K] << '\n'; } else { K -= (branch.size() - 1); i64 ans = 0; ans += branch.back(); ans += (K / (loop.size() - 1)) * loop.back(); ans += loop[K % (loop.size() - 1)]; std::cout << ans << '\n'; } } return 0; }