#include <bits/stdc++.h>
using namespace std;
int n;
int a[2000000];
int b[2000000];
int tmp[2000000];
int q;
long long layer[25];
long long layer2[25];
void merge(int s, int mid, int e, int level) {
  int i, j;
  int p = s;
  i = s;
  j = mid + 1;
  while (i <= mid && j <= e) {
    if (a[i] <= a[j]) {
      tmp[p] = a[i];
      i++;
      p++;
    } else {
      layer[level] += mid + 1 - i;
      tmp[p] = a[j];
      j++;
      p++;
    }
  }
  while (i <= mid) {
    tmp[p] = a[i];
    i++;
    p++;
  }
  while (j <= e) {
    tmp[p] = a[j];
    p++;
    j++;
  }
  for (i = s; i <= e; i++) a[i] = tmp[i];
}
void merge_sort(int s, int e, int level) {
  if (e == s) return;
  int mid = (s + e) / 2;
  merge_sort(s, mid, level - 1);
  merge_sort(mid + 1, e, level - 1);
  merge(s, mid, e, level);
}
void merge2(int s, int mid, int e, int level) {
  int i, j;
  int p = s;
  i = s;
  j = mid + 1;
  while (i <= mid && j <= e) {
    if (a[i] < a[j]) {
      layer2[level] += e + 1 - j;
      tmp[p] = a[i];
      i++;
      p++;
    } else {
      tmp[p] = a[j];
      j++;
      p++;
    }
  }
  while (i <= mid) {
    tmp[p] = a[i];
    i++;
    p++;
  }
  while (j <= e) {
    tmp[p] = a[j];
    p++;
    j++;
  }
  for (i = s; i <= e; i++) a[i] = tmp[i];
}
void merge_sort2(int s, int e, int level) {
  if (e == s) return;
  int mid = (s + e) / 2;
  merge_sort2(s, mid, level - 1);
  merge_sort2(mid + 1, e, level - 1);
  merge2(s, mid, e, level);
}
int main() {
  scanf("%d", &n);
  int i;
  for (i = 1; i <= 1 << n; i++) scanf("%d", &a[i]);
  memcpy(b, a, sizeof(int) * 1100000);
  merge_sort(1, 1 << n, n + 1);
  memcpy(a, b, sizeof(int) * 1100000);
  merge_sort2(1, 1 << n, n + 1);
  scanf("%d", &q);
  long long ans = 0;
  for (i = 1; i <= n + 1; i++) {
    ans += layer[i];
  }
  for (i = 1; i <= q; i++) {
    int tmp;
    scanf("%d", &tmp);
    tmp++;
    for (int j = tmp; j >= 1; j--) {
      ans -= layer[j];
      ans += layer2[j];
      swap(layer[j], layer2[j]);
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
