zoukankan      html  css  js  c++  java
  • 求N维前缀和

    转载自http://blog.csdn.net/jzhang1/article/details/50528549#comments

    膜拜

     1  #include <iostream>  
     2 #include <cstring>  
     3 #include <cstdlib>  
     4 #include <string>  
     5 #include <cstdio>  
     6 #include <algorithm>  
     7 #include <cmath>  
     8 #include <ctime>  
     9 using namespace std;  
    10 int n,A[2000010];  
    11 int main() {  
    12     scanf("%d",&n);  
    13     for(int i = 0;i <= n;i ++) scanf("%d",&A[i]);  
    14     for(int i = 0;i <= 19;i ++) {  
    15         for(int j = 0;j <= n - 1;j ++) {  
    16             if((j >> i) % 2 == 1) {  
    17                 A[j] += A[j ^ (1 << i)];  
    18             }  
    19         }  
    20     }  
    21     for(int i = 0;i <= n - 1;i ++) printf("%d
    ",A[i]);  
    22     return 0;  
    23 }  

    原题大意:给出一个序列A,f(i) = sigma(A(j)) 其中j是i的子集(即i&j==j),数列从0开始,保证序列长度为2的整数次幂。

    我们把这个想成2*2*2....的k维立方体。求一个前缀和的前缀和的前缀和的前缀和的.......的前缀和就行了。

  • 相关阅读:
    Jetson Nano更改软件源
    树莓派开机启动VNC
    树莓派VNC复制粘贴
    数学之美-泰勒公式
    C++顺序容器
    eigen的简单用法汇总
    C++并发-同步并发
    C++ string类
    C++并发-互斥元
    Nginx常用命令
  • 原文地址:https://www.cnblogs.com/myx12345/p/6165909.html
Copyright © 2011-2022 走看看