#include <bits/stdc++.h>
using namespace std;
int n;
int a[1 << 21], temp[1 << 21];
int mp[1 << 21];
long long ans[22][2];
int mask[22];
void solve(int L, int R) {
  if (L == R) return;
  int M = (L + R) / 2;
  solve(L, M);
  solve(M + 1, R);
  int l = L, r = M + 1;
  int now = mp[R - L + 1];
  int i = L;
  while (l <= M && r <= R) {
    if (a[l] > a[r]) {
      ans[now][0] += M - l + 1;
      temp[i++] = a[r++];
      continue;
    }
    temp[i++] = a[l++];
  }
  i = L;
  l = L;
  r = M + 1;
  while (l <= M && r <= R) {
    if (a[l] < a[r]) {
      ans[now][1] += R - r + 1;
      temp[i++] = a[l++];
      continue;
    }
    temp[i++] = a[r++];
  }
  while (l <= M) temp[i++] = a[l++];
  while (r <= R) temp[i++] = a[r++];
  for (int i = L; i <= R; i++) a[i] = temp[i];
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i <= n; i++) mp[1 << i] = i;
  for (int i = 1; i <= (1 << n); i++) scanf("%d", &a[i]);
  solve(1, 1 << n);
  long long res = 0;
  for (int i = 0; i <= n; i++) res += ans[i][0];
  int q;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int p;
    scanf("%d", &p);
    for (int j = p; j >= 0; j--) {
      res += ans[j][mask[j] ^ 1] - ans[j][mask[j]];
      mask[j] ^= 1;
    }
    printf("%I64d\n", res);
  }
  return 0;
}
