#include <bits/stdc++.h>
using namespace std;
int a[21][(1 << 21) + 2];
long long in[30];
long long out[30];
long long tot[30];
int main() {
  int n;
  scanf("%d", &n);
  int N = (1 << n);
  for (int i = (0); i < (N); ++i) {
    scanf("%d", &a[0][i]);
  }
  for (int i = (1); i < (n + 1); ++i) {
    int sz = (1 << (i - 1));
    int in1 = 0, in2 = sz;
    int ind = 0;
    in[i] = in[i - 1] + out[i - 1];
    while (in1 < N) {
      int p1 = in1;
      int p2 = in2;
      while ((p1 < in2) || (p2 < in2 + sz)) {
        if (p1 == in2) {
          a[i][ind++] = a[i - 1][p2++];
        } else if (p2 == in2 + sz) {
          a[i][ind++] = a[i - 1][p1++];
        } else {
          if (a[i - 1][p1] <= a[i - 1][p2]) {
            a[i][ind++] = a[i - 1][p1++];
          } else {
            a[i][ind++] = a[i - 1][p2++];
            out[i] += in2 - p1;
          }
        }
      }
      int k = sz + sz;
      tot[i] += k * 1ll * (k - 1) / 2;
      int cnt = 1;
      for (int j = (in1 + 1); j < (in2 + sz); ++j) {
        if (a[i][j] == a[i][j - 1]) {
          cnt++;
        } else {
          if (cnt >= 2) tot[i] -= cnt * 1ll * (cnt - 1) / 2;
          cnt = 1;
        }
      }
      if (cnt >= 2) tot[i] -= cnt * 1ll * (cnt - 1) / 2;
      in1 += sz + sz;
      in2 += sz + sz;
    }
  }
  int m;
  scanf("%d", &m);
  for (int i = (0); i < (m); ++i) {
    int q;
    scanf("%d", &q);
    for (int j = (1); j < (q + 1); ++j) {
      long long oldin = in[j];
      long long oldout = out[j];
      in[j] = in[j - 1] + out[j - 1];
      out[j] = (tot[j] - oldin - oldout) - in[j];
    }
    for (int j = (q + 1); j < (n + 1); ++j) in[j] = in[j - 1] + out[j - 1];
    printf("%I64d\n", in[n] + out[n]);
  }
}
