第二题ac代码:
#include <bits/stdc++.h>

using namespace std;

long long f[30], e[30];
int a[1050000];

void divide(int l, int r,int x);

int main(){
    int n, m;
    scanf("%d", &n);
    m = pow(2,n);
    
    for (int i=0; i<m; ++i){
        scanf("%d", &a[i]);
    }
    
    divide(0,m,n);
    
    int t, p;
    long long ans;
    scanf("%d", &t);
    while (t--){
        scanf("%d", &p);
        for (int i=1; i<=p; ++i)
            f[i] = pow(2,i+n-2) - e[i] - f[i];
        ans = 0;
        for (int i=1; i<=n; ++i){
            ans += f[i];
        }
        cout << ans << endl;
    }
    
}

void divide(int l, int r,int x){
    if (x==0){
        return;
    
    
    int mid = (l+r) / 2;
    divide(l,mid,x-1);
    divide(mid,r,x-1);
    
    int nowp = mid;
    for (int i=l; i<mid; i++){
        while (nowp < r && a[nowp] < a[i]) nowp++;
        f[x] += (nowp-mid);
    }
    
    int i=l, j=mid, ri, rj;
    while (i<mid && j<r){
        if (a[i] == a[j]){
            ri = rj = 1;
            while (ri+i < mid && a[ri+i] == a[i]) ri++;
            while (rj+j < r && a[rj+j] == a[j]) rj++;
            e[x] += ri * rj;
            i += ri;
            j += rj;
            continue;
        }
        if (a[i] > a[j]) j++;
        else i++;
    }
    
    vector<int> v;
    i=l; 
    j=mid;
    while (i<mid || j<r){
        if (i==mid) {
            v.push_back(a[j++]);
            continue;
        }
        if (j==r) {
            v.push_back(a[i++]);
            continue;
        }
        if (a[i] < a[j])
            v.push_back(a[i++]);
        else
            v.push_back(a[j++]);
    }
    for (int i=l; i<r; ++i)
        a[i] = v[i-l];
        
}