#include <bits/stdc++.h>
using namespace std;
const int N = (1 << 21);
int n, a[N], m;
long long val[N][3], sum[21][3];
vector<int> node[4 * N];
template <typename T>
inline void Cin(T& x) {
  char c = getchar();
  x = 0;
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
}
template <typename T, typename... Args>
inline void Cin(T& a, Args&... args) {
  Cin(a);
  Cin(args...);
}
void build(int id, int l, int r) {
  if (l == r) {
    node[id].push_back(a[l]);
    val[id][1] = 0;
    val[id][2] = 0;
    return;
  }
  int mid = (l + r) / 2;
  build(id * 2, l, mid);
  build(id * 2 + 1, mid + 1, r);
  node[id].resize(node[id * 2].size() + node[id * 2 + 1].size());
  merge(node[id * 2].begin(), node[id * 2].end(), node[id * 2 + 1].begin(),
        node[id * 2 + 1].end(), node[id].begin());
  int j = 0;
  for (int i = 0; i < node[id * 2 + 1].size(); i++) {
    int cur = node[id * 2 + 1][i];
    while (j < node[id * 2].size() && node[id * 2][j] < cur) j++;
    val[id][2] += 1ll * j;
  }
  j = 0;
  for (int i = 0; i < node[id * 2].size(); i++) {
    int cur = node[id * 2][i];
    while (j < node[id * 2 + 1].size() && node[id * 2 + 1][j] < cur) j++;
    val[id][1] += 1ll * j;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  Cin(n);
  for (int i = 1; i <= (1 << n); i++) Cin(a[i]);
  build(1, 1, (1 << n));
  for (int i = 0; i <= n; i++) {
    for (int l = (1 << i); l < (1 << (i + 1)); l++) {
      sum[i][1] += val[l][1];
      sum[i][2] += val[l][2];
    }
  }
  Cin(m);
  while (m--) {
    int h;
    Cin(h);
    long long res = 0;
    for (int i = n - h; i <= n; i++) swap(sum[i][1], sum[i][2]);
    for (int i = 0; i <= n; i++) res = res + sum[i][1];
    cout << res << '\n';
  }
}
