// Created On : 2026-10-06 17:48:16 #include #include using namespace std; #define ll long long #define returnNO {std::cout << "NO\n"; return;} #define returnYES {std::cout << "YES\n"; return;} #define returnAns(x) {cout << x << "\n"; return;} template using MaxHeap = std::priority_queue, std::less>; template using MinHeap = std::priority_queue, std::greater>; const int MOD1 = 1000000007; const int MOD2 = 998244353; /** obs ** 1. first chain and then cycle 2. compute X % N -> add arr[r] to X **/ void solve(int test_case_index) { int n; cin >> n; vector arr(n, 0); for (int& a : arr) cin >> a; ll X = 0; vector vis(n, false); vector ans; ans.reserve(n); auto walkCycle = [&] () -> int { while (true) { int r = X % n; if (vis[r]) return r; vis[r] = true, X += arr[r]; ans.push_back(arr[r]); } }; int start = walkCycle(); ll len = 1; while ((X + arr[X % n]) % n != start) len += 1, X += arr[X % n]; vector psum(n + 1, 0); for (int i = 1; i <= n; ++i) psum[i] = psum[i - 1] + ans[i - 1]; auto calcAns = [&] (ll k) -> ll { ll chain_len = n - len; ll chain_ans = psum[min(chain_len, k)]; k -= min(chain_len, k); ll cycles = k / len, rem = k % len; ll cycle_ans = cycles * (psum[n] - psum[n - len]) + (psum[n - len + rem] - psum[n - len]); return chain_ans + cycle_ans; }; int q; cin >> q; while (q--) { ll k; cin >> k; cout << calcAns(k) << "\n"; } } void preComp() { } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); preComp(); int t = 1; // std::cin >> t; for (int i = 1; i <= t; ++i) solve(i); return 0; }