#include <bits/stdc++.h>
using namespace std;
typedef struct {
  long long l, r, inv, ver;
} TVertex;
vector<TVertex> tree;
vector<long long> m1, m2;
long long MAXN;
long long lower(long long x) {
  long long l = -1;
  long long r = m2.size();
  for (; r - l > 1;) {
    long long m = (r + l) / 2;
    if (m2[m] < x) {
      l = m;
    } else {
      r = m;
    }
  }
  return l;
}
long long upper(long long x) {
  long long l = -1;
  long long r = m2.size();
  for (; r - l > 1;) {
    long long m = (l + r) / 2;
    if (m2[m] > x) {
      r = m;
    } else {
      l = m;
    }
  }
  return r;
}
int main() {
  ios_base::sync_with_stdio(false);
  long long n;
  cin >> n;
  vector<long long> a(1 << n);
  tree.resize(1 << (n + 1));
  for (long long i = 0; i < (1 << n); ++i) {
    cin >> a[i];
  }
  vector<pair<long long, long long> > lvl(n + 1);
  TVertex zero;
  zero.inv = 0;
  zero.ver = 0;
  MAXN = (1 << n);
  for (long long i = 0; i < MAXN; ++i) {
    zero.l = i;
    zero.r = i;
    tree[MAXN + i] = zero;
  }
  for (long long i = MAXN - 1; i > 0; --i) {
    tree[i].l = tree[i * 2].l;
    tree[i].r = tree[i * 2 + 1].r;
    tree[i].inv = tree[i * 2].inv + tree[i * 2 + 1].inv;
    tree[i].ver = tree[i * 2].ver + tree[i * 2 + 1].ver;
    long long l1 = tree[i].l, r1 = tree[i * 2].r;
    long long l2 = tree[i * 2 + 1].l, r2 = tree[i].r;
    m1.clear();
    m2.clear();
    for (long long j = l1; j <= r1; ++j) {
      m1.push_back(a[j]);
    }
    for (long long j = l2; j <= r2; ++j) {
      m2.push_back(a[j]);
    }
    sort(m2.begin(), m2.end());
    for (long long j = 0; j < (long long)m1.size(); ++j) {
      long long ind1 = upper(m1[j]);
      long long ind2 = lower(m1[j]);
      tree[i].inv += ind2 + 1;
      tree[i].ver += (long long)m2.size() - ind1;
    }
  }
  long long pwr1 = 1;
  long long pwr2 = 2;
  for (long long i = 0; i <= n; ++i) {
    long long cinv = 0, cver = 0;
    for (long long j = pwr1; j < pwr2; ++j) {
      cinv += tree[j].inv;
      cver += tree[j].ver;
    }
    pwr1 = pwr2;
    pwr2 *= 2;
    lvl[n - i].first = cinv;
    lvl[n - i].second = cver;
  }
  long long m;
  cin >> m;
  for (long long i = 0; i < m; ++i) {
    long long q;
    cin >> q;
    if (q == 0) {
      cout << lvl[n].first << endl;
      continue;
    }
    long long delt = lvl[q].second - lvl[q].first;
    for (long long i = q; i > 0; --i) {
      swap(lvl[i].first, lvl[i].second);
    }
    for (long long i = q + 1; i <= n; ++i) {
      lvl[i].first += delt;
      lvl[i].second -= delt;
    }
    cout << lvl[n].first << endl;
  }
  return 0;
}
