#include <bits/stdc++.h>
using namespace std;
long long a[2000000];
long long b[2000000];
long long t[21];
int n, m;
long long ans[21];
long long sa[21];
void solve(long long l, long long r, long long d) {
  if (l == r) return;
  long long mid = (l + r) / 2;
  solve(l, mid, d - 1);
  solve(mid + 1, r, d - 1);
  long long t1 = l;
  long long z = l - 1;
  long long t2 = mid + 1;
  while (t1 <= mid || t2 <= r) {
    if (t1 > mid) {
      b[++z] = a[t2];
      t2++;
      continue;
    }
    if (t2 > r) {
      b[++z] = a[t1];
      t1++;
      continue;
    }
    if (a[t1] < a[t2]) {
      b[++z] = a[t1];
      t1++;
      continue;
    } else if (a[t1] > a[t2]) {
      b[++z] = a[t2];
      t2++;
      ans[d] += mid - t1 + 1;
      continue;
    } else {
      long long z1, z2;
      b[++z] = a[t1];
      t1++;
      z1 = 1;
      z2 = 0;
      while (t1 <= mid && a[t1] == b[z]) {
        b[++z] = a[t1];
        t1++;
        z1++;
      }
      while (t2 <= r && a[t2] == b[z]) {
        b[++z] = a[t2];
        t2++;
        z2++;
        ans[d] += mid - t1 + 1;
      }
      sa[d] += z1 * z2;
      continue;
    }
  }
  for (int i = l; i <= r; i++) a[i] = b[i];
  return;
}
int main() {
  scanf("%d", &n);
  t[0] = 1;
  for (int i = 1; i <= n; i++) t[i] = t[i - 1] * 2;
  for (int i = 1; i <= t[n]; i++) scanf("%I64d", &a[i]);
  solve(1, t[n], n - 1);
  scanf("%d", &m);
  int k;
  long long sum = 0;
  for (int i = 0; i < n; i++) sum += ans[i];
  for (int i = 1; i <= m; i++) {
    scanf("%d", &k);
    for (int j = 0; j < k; j++) {
      sum -= ans[j];
      ans[j] = t[j] * t[j] * t[n - j - 1] - ans[j];
      ans[j] -= sa[j];
      sum += ans[j];
    }
    printf("%I64d\n", sum);
  }
  return 0;
}
