#include <bits/stdc++.h>
int num[1050000];
int num2[1050000];
long long inv[22][2] = {{0}};
int po[22];
long long cc[22] = {0};
void merge(int l, int r, int len) {
  int i1, i2, j1, j2;
  int m;
  if (l != r) {
    merge(l, (l + r) / 2, len - 1);
    merge((l + r) / 2 + 1, r, len - 1);
    j1 = l;
    j2 = (l + r) / 2 + 1;
    i1 = l;
    while (j1 <= (l + r) / 2 && j2 <= r) {
      if (num[j1] < num[j2]) {
        num2[i1] = num[j1];
        j1++;
        i1++;
      } else if (num[j1] == num[j2]) {
        for (i2 = j2; i2 <= r && num[j1] == num[i2]; i1++, i2++) {
          num2[i1] = num[j2];
        }
        m = i2 - j2;
        j2 += m;
        i1--;
        j2--;
        for (; j1 <= (l + r) / 2 && num[j1] == num[j2]; i1++) {
          num2[i1] = num[j1];
          inv[len][1] += m;
          j1++;
        }
      } else {
        num2[i1] = num[j2];
        inv[len][0] += (l + r) / 2 - j1 + 1;
        j2++;
        i1++;
      }
    }
    for (; j1 <= (l + r) / 2; i1++, j1++) {
      num2[i1] = num[j1];
    }
    for (; j2 <= r; i1++, j2++) {
      num2[i1] = num[j2];
    }
    for (i1 = l; i1 <= r; i1++) {
      num[i1] = num2[i1];
    }
  }
}
int main() {
  int i1, i2;
  int n, m, q;
  long long sum;
  po[0] = 1;
  for (i1 = 1; i1 < 21; i1++) {
    po[i1] = po[i1 - 1] * 2;
    cc[i1] = (long long)po[i1 - 1] * po[i1 - 1];
  }
  scanf("%d", &n);
  for (i1 = 0; i1 < po[n]; i1++) {
    scanf("%d", &num[i1]);
  }
  merge(0, po[n] - 1, n);
  scanf("%d", &m);
  for (i1 = 0; i1 < m; i1++) {
    scanf("%d", &q);
    sum = 0;
    for (i2 = 1; i2 <= q; i2++) {
      inv[i2][0] = cc[i2] * po[n - i2] - inv[i2][1] - inv[i2][0];
      sum += inv[i2][0];
    }
    for (; i2 <= n; i2++) {
      sum += inv[i2][0];
    }
    printf("%I64d\n", sum);
  }
  return 0;
}
