高维前缀和

 复杂度 2^n*n

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=(1<<21);
ll a[N];
int n;
int main(){
    scanf("%d",&n);int p=0;
    for(int i=0;i<n;i++) scanf("%lld",&a[i]);
    for(int i=1;i<n;i<<=1){p++;
        for(int j=0;j<n;j++){
            if((j&(1<<p-1))) a[j]+=a[(j^(1<<p-1))];
        }
    }for(int i=0;i<n;i++) printf("%lld
",a[i]);return 0;
}

原文地址:https://www.cnblogs.com/Aragaki/p/11440710.html