#include <bits/stdc++.h>
using namespace std;
const double EPS = 0.0000001;
const double PI = acos(-1);
const int INF = 0x7FFFFFFF;
template <typename T>
inline void next(T &num) {
  char c;
  num = 0;
  do {
    c = getchar_unlocked();
  } while (c != EOF && c == ' ' && c == '\n' && c == '\t');
  int sign = (c == '-' ? -1 : 1);
  if (c != '-') num += (c - '0');
  while ((c = getchar_unlocked()) != EOF && c != '\n' && c != '\t' &&
         c != ' ') {
    num *= 10;
    num += (c - '0');
  }
  num *= sign;
}
inline string getstr() {
  string str;
  char k;
  while ((k = getchar_unlocked()) == ' ' || k == '\n') {
    k = getchar_unlocked();
    if (k == ' ' || k == '\n')
      continue;
    else
      break;
  }
  str.push_back(k);
  while ((k = getchar_unlocked()) != EOF && k != '\n' && k != '\t' &&
         k != '\v' && k != '\0' && k != ' ')
    str.push_back(k);
  return str;
}
const int N = 1050000;
long long inv1[21], inv2[21];
int a[N], b[N], tmp[N], p, n, m;
bool stat[22];
void mergesort1(int l, int r, int lv) {
  if (lv == 0) return;
  int mid = (l + r) >> 1, i = l, j = mid + 1, cur = 0;
  mergesort1(l, mid, lv - 1);
  mergesort1(mid + 1, r, lv - 1);
  while (i <= mid && j <= r) {
    if (a[j] < a[i]) {
      inv1[lv - 1] += mid - i + 1;
      tmp[cur++] = a[j++];
    } else
      tmp[cur++] = a[i++];
  }
  while (i <= mid) tmp[cur++] = a[i++];
  while (j <= r) tmp[cur++] = a[j++];
  for (int t = int(r), _b = int(l); t >= _b; t--) a[t] = tmp[--cur];
}
void mergesort2(int l, int r, int lv) {
  if (lv == 0) return;
  int mid = (l + r) >> 1, i = l, j = mid + 1, cur = 0;
  mergesort2(l, mid, lv - 1);
  mergesort2(mid + 1, r, lv - 1);
  while (i <= mid && j <= r) {
    if (b[j] > b[i]) {
      inv2[lv - 1] += mid - i + 1;
      tmp[cur++] = b[j++];
    } else
      tmp[cur++] = b[i++];
  }
  while (i <= mid) tmp[cur++] = b[i++];
  while (j <= r) tmp[cur++] = b[j++];
  for (int t = int(r), _b = int(l); t >= _b; t--) b[t] = tmp[--cur];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> p;
  n = 1 << p;
  for (int i = int(0), _b = int(n - 1); i <= _b; i++) {
    cin >> a[i];
    b[i] = a[i];
  }
  mergesort1(0, n - 1, p);
  mergesort2(0, n - 1, p);
  inv1[p] = inv1[p - 1];
  inv2[p] = inv2[p - 1];
  cin >> m;
  while (m--) {
    int q;
    cin >> q;
    for (int i = int(0), _b = int(q - 1); i <= _b; i++) stat[i] ^= 1;
    long long res = 0;
    for (int i = int(0), _b = int(p - 1); i <= _b; i++)
      res += stat[i] ? inv2[i] : inv1[i];
    cout << res << '\n';
  }
  return 0;
}
