#include <bits/stdc++.h>
using namespace std;
int A[(1 << 20) + 4], n;
long long store[21][2], INV = 0;
long long query(int l, int r, int no) {
  return (A + r + 1 - upper_bound(A + l, A + r + 1, no));
}
void gen(int de, int l, int r) {
  if (!de) return;
  gen(de - 1, l, (l + r) / 2);
  gen(de - 1, (l + r) / 2 + 1, r);
  int a = l, b = (l + r) / 2, c = r;
  for (int i = a; i <= b; i++) {
    long long nos = query(b + 1, c, A[i]);
    store[de][1] += nos;
  }
  for (int i = b + 1; i <= c; i++) {
    long long nos = query(a, b, A[i]);
    store[de][0] += nos;
  }
  sort(A + l, A + r + 1);
}
int main() {
  cin >> n;
  for (int i = 1; i <= (1 << n); i++) cin >> A[i];
  gen(n, 1, (1 << n));
  for (int de = n; de > 0; de--) INV += store[de][0];
  int m;
  cin >> m;
  while (m--) {
    int de;
    cin >> de;
    while (de != 0) {
      INV -= store[de][0];
      INV += store[de][1];
      swap(store[de][0], store[de][1]);
      de--;
    }
    printf("%lld\n", INV);
  }
  return 0;
}
