求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\n",A[i]);
22     return 0;
23 }  

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

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

时间: 2024-11-10 00:13:29

求N维前缀和的相关文章

天上的星星(二维前缀和)

在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 qq 次,每次他问自己每个矩形区域的星星的亮度和是多少(包含边界上的星星). 输入格式 第一行输入一个整数 n(1 \le n \le 50000)n(1≤n≤50000) 表示星星的数量. 接下里 nn 行,每行输入三个整数 x,y,w(0 \le x, y, w\le 2000)x,y,w(0≤

HDU-6514 Monitor(二维前缀和+差分)

http://acm.hdu.edu.cn/showproblem.php?pid=6514 Problem Description Xiaoteng has a large area of land for growing crops, and the land can be seen as a rectangle of n×m. But recently Xiaoteng found that his crops were often stolen by a group of people,

Good Bye 2015 C. New Year and Domino 二维前缀

C. New Year and Domino They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I don't think so. Limak is a little polar bear who loves to play. He has recently got a rectangular grid with h rows and w

弱校联盟10.7 I. Special Squares(二维前缀和)

题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. If arbitrary chosen two lines parallel to x-axis and two lines parallel to y-axis, one rectangle, or sometimes a square, will be formed. If a square i

杭电2018多校第四场(2018 Multi-University Training Contest 4) 1005.Problem E. Matrix from Arrays (HDU6336) -子矩阵求和-规律+二维前缀和

6336.Problem E. Matrix from Arrays 不想解释了,直接官方题解: 队友写了博客,我是水的他的代码 ------>HDU 6336 子矩阵求和 至于为什么是4倍的,因为这个矩阵是左上半边有数,所以开4倍才能保证求的矩阵区域里面有数,就是图上的红色阴影部分,蓝色为待求解矩阵. 其他的就是容斥原理用一下,其他的就没什么了. 代码: 1 //1005-6336-矩阵求和-二维前缀和+容斥-预处理O(1)查询输出 2 #include<iostream> 3 #in

前缀和,二维前缀和!

前缀和 定义 用空间换取效率,做一个预处理,然后可以\(O(1)\)的查询某个区间的值的和. 实现 设\(s_i\)为第\(i\)个数\(a_i\)的前缀和,则\(s_i=s_i-1+a_i\) 当要查找区间的和时只要把对应的起点终点的元素相减即可. 例题 Educational Codeforces Round 30B Balanced Substring 翻译 给你一个长度至多为\(100000\)的\(01\)串,其中含有相同\(0\),\(1\)个数的子串被称为"平衡串",问你

切蛋糕(二分)(二维前缀和)

观察数据范围,n*m比较小,所以我们预先处理出前缀和. 然后我们可以考虑写一个函数来计算二维前缀和(二维前缀和大家都会的吧qwq,那我就不说了,就是要注意一下哪个是横轴哪个是纵轴) 之后就是二维上的二分位置,然后check看看符不符合二分出来的ans. 注:一半求最大化最小值和最小化最大值的问题,都可以往二分想.我们可以把最优化问题二分后来check转化为判定问题. #include<cstdio> #include<cstring> #include<iostream>

【luogu2038】【noip2014】无线网络发射器选址 [模拟][二维前缀和]

P2038 无线网络发射器选址 这个题有很多种做法 然后就可以练很多小的算法 技巧啥的嘿嘿 首先是模拟 要开一个为128+40为边长的数组 然后枚举在20~148内以(i,j)为中心的正方形 然后再挨个挨个计算sum 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define rg register 4 #define ll long long 5 const int N=200; 6 int n,d,mp[N][N]; 7 templ

Acwing-99-激光炸弹(二维前缀和)

链接: https://www.acwing.com/problem/content/101/ 题意: 一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标. 现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi. 激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行. 若目标位于爆破正方形的边上,该目标不会被摧毁. 求一颗炸弹最多能炸掉地图上总价值为多少的目标. 思路: 二维前缀和搞