#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, Q;
cin >> N;
vector<int> lengths(N);
for (int i = 0; i < N; ++i) {
cin >> lengths[i];
}
cin >> Q;
vector<int> queries(Q);
for (int i = 0; i < Q; ++i) {
cin >> queries[i];
}
// 模拟切割过程,但实际上并不改变数组
for (int i = N - 1; i >= 0; --i) {
while (lengths[i] % 2 == 0) {
// 标记为已切割,但实际上不改变数组
// 在实际查询时,我们需要考虑这个标记
lengths[i] /= 2;
// 如果这不是最右边的段,我们可以创建一个新的段在其右侧
if (i < N - 1) {
lengths.push_back(lengths[i]);
N++; // 更新段数
}
}
}
// 回答查询
for (int i = 0; i < Q; ++i) {
int index = queries[i] - 1; // 索引从0开始
// 如果该段或其任何右侧的段被切割过,我们需要加上这些额外的段
while (index >= N - 1) {
index -= N - 1; // 跳转到新创建的段的索引
N--; // 更新段数,因为我们“移除”了最右边的段
}
cout << lengths[index] << endl;
}
return 0;
}