数据结构_树状数组
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
树状数组入门之POJ 2352 Star
树状数组BIT(Binary index tree) 对于树状数组而要我们可以发现树状数组的那个图就是线段树的去掉所有右孩子节点得到的,因此树状数组相当于在线段树上做了一个优化,相当于去掉了一个常数,并且空间上也进行了优化,线段树通常需要比原来大小开4倍,但是树状数组就不用,但是树状数组只提供2种操作,一个就是询问1到x的所有数的和,另一个就是对单点进行更新,其他操作较为复杂。操作一int s原创 2016-11-04 10:53:54 · 260 阅读 · 0 评论 -
POJ 2155 Matrix(二维树状数组)
题目分析 这道题的思路很巧妙,不过这种思想我在写其他题的时候也用过。 那道题的操作是先对区间进行操作,包括区间内所有值都增加x或者区间所有值都减少x,其实处理起来很简单,对于a[l]我们加x,对于a[r+1]减x处理完成之后,就是这样处理之后,如果问你a数列哪个位置上的值,我们就可以利用前缀和的思想,一个for循环,从头到尾可以把所有值都算出来,不懂得可以手动模拟一下。其他的就是树状数组的原创 2016-11-04 19:48:57 · 312 阅读 · 0 评论 -
HDU 5892 Resident Evil(二维树状数组,好题)
题目大意 这道题的大意是一个城市有n*n个格子组成,每次都可以选择一个长方形的区域然后往里面放怪物,然后这个长方形区域里面的每个小格子都有同样数量的怪物,就是相当于一个二维区间更新了,然后又给你一个长方形的区域,询问该长方形区域里面有多少50种怪物的具体情况,如果该种怪物为奇数则输出2,否则输出1.题目分析 我们可以利用树状数组来完场区间更新,对于50种怪物很明显可以用long long类原创 2016-11-06 09:34:55 · 562 阅读 · 0 评论 -
POJ 2481 Cows(树状数组)
题目分析 这道题真的是给我wa出血!!主要是因为数组忘了初始化,以后还是要注意这些问题。这道题我以先按E排序从大到小排序,然后按照S从小到大排序,排序完成即可以树状数组求解即可。注意前后2个S,E值相同的情况。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace原创 2017-04-25 20:58:24 · 302 阅读 · 0 评论 -
HDU 5869 Different GCD Subarray Query(离线处理+树状数组)
题目分析 题意我就不说了,不过可以发现题意简单的题目并没有几道能做出来的。 这题首先可以枚举每一个右端点,我们会发现我们直接可以利用前一个端点求出来的所有gcd,就是gcd(a,b,c)=gcd(gcd(a,b),c)gcd(a,b,c) = gcd(gcd(a, b), c)的思想,又因为一个数的gcd个数其实最多就是这个数的约数个数,其实并不大,分解质因数之后很容易发现。这样我们预处理原创 2017-04-27 20:45:32 · 378 阅读 · 0 评论