#include <bits/stdc++.h>
using namespace std;
const int maxn = 1050010;
struct P {
  int b, v, c;
} p[maxn];
int a[maxn];
int d[maxn];
int temp[23];
long long g[23][2];
int n;
bool cmp1(P b1, P b2) { return b1.b < b2.b; }
bool cmp2(P b1, P b2) { return b1.v < b2.v; }
int lowbit(int x) { return x & (-x); }
void change(int x, int y) {
  while (x <= (1 << n)) {
    d[x] += y;
    x += lowbit(x);
  }
  return;
}
int sum(int k) {
  int ans = 0;
  while (k > 0) {
    ans += d[k];
    k -= lowbit(k);
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (1 << n); i++) {
    scanf("%d", &a[i]);
    p[i].b = a[i];
    p[i].v = i;
  }
  sort(p, p + (1 << n), cmp1);
  for (int i = 0; i < (1 << n); i++) {
    p[i].c = i + 1;
    if (i == 0) continue;
    if (p[i].b == p[i - 1].b) p[i].c = p[i - 1].c;
  }
  sort(p, p + (1 << n), cmp2);
  for (int i = 0; i < (1 << n); i++) a[i] = p[i].c;
  for (int i = 1; i <= n; i++) {
    int k = 0;
    for (int j = 0; j < (1 << n); j++) {
      g[i][0] += (k - sum(a[j]));
      g[i][1] += (sum(a[j] - 1));
      k++;
      if (k == (1 << i)) {
        for (int l = j - 1;; l--) {
          change(a[l], -1);
          if ((l % (1 << i)) == 0) break;
        }
        k = 0;
      } else
        change(a[j], 1);
    }
  }
  for (int i = n; i > 1; i--) {
    g[i][1] = g[i][1] - g[i - 1][1];
    g[i][0] = g[i][0] - g[i - 1][0];
  }
  memset(temp, 0, sizeof(temp));
  int m, q;
  long long ans;
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    scanf("%d", &q);
    for (int j = q; j > 0; j--) {
      temp[j] = 1 - temp[j];
    }
    ans = 0;
    for (int j = 1; j <= n; j++) ans += g[j][temp[j]];
    printf("%lld\n", ans);
  }
  return 0;
}
