
树状数组
文章平均质量分 75
Kylehz
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1166 (树状数组 简单题)
//250ms #include #include #include using namespace std; #define low(x) x&(-x) int c[50005],n; void add(int i,int val) { while(i<=n) { c[i]+=val; i+=low(i); } } int getsum(i原创 2014-04-01 09:07:09 · 458 阅读 · 0 评论 -
ZOJ 3635 Cinema in Akiba (树状数组+二分)
//460ms #include #include #include #include using namespace std; #define low(x) x&(-x) int c[100005],ans[100005],n; void add(int i,int val) { while(i<=n) { c[i]+=val; i+=low(i)原创 2014-04-01 14:33:16 · 389 阅读 · 0 评论 -
树状数组的理解
菜鸟一个,说的不好还望指点 去年学的树状数组,现在都忘没了,复习一下。 给你一组数据,例如a[1],a[2],a[3],...a[k],..a[n],求任意一段区间和(比如说从a[i]---a[j]的所有数的和),线性求解,时间复杂度O(n),规模较大时,会TLE。怎么办?思路:以空间换时间。提前存储一些数据的和。怎么存储会节省时间? 方法一:构造一个和数组sum,每次输入第i个转载 2014-03-31 19:34:16 · 468 阅读 · 0 评论 -
POJ 2352 Stars (树状数组)
//125ms #include #include #include #include using namespace std; int c[32005],ans[15005],n,ma; int data[15005]; int low(int t) { return t&(-t); } void update(int i,int val) { while(i<=ma+1)//一原创 2014-04-03 10:22:32 · 353 阅读 · 0 评论 -
POJ 2155 Matrix (二维树状数组+经典题)
好开森啊,一次就AC了 //500ms #include #include #include #define low(x) x&(-x); using namespace std; int c[1001][1001],n; void update(int x,int y,int val) { while(x<=n) { int y1=y; wh原创 2014-04-03 12:43:58 · 393 阅读 · 0 评论 -
树状数组基本概念
如果给定一个数组,要你求里面所有数的和,一般都会想到累加。但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组中的元素后,仍然要你求数组中某段元素的和,就显得麻烦了。所以我们就要用到树状数组,他的时间复杂度为O(lgn),相比之下就快得多。下面就讲一下什么是树状数组: 一般讲到树状数组都会少不了下面这个图:转载 2014-03-28 10:59:35 · 561 阅读 · 0 评论