树状数组
kalilili
双眼闭三年。
展开
-
POJ 2352 Stars(树状数组 or 线段树)
链接:http://poj.org/problem?id=2352题目大意:在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0按照y递增,如果y相同则x递增的顺序给出n个星星,求出所有level水平的数量。思路:由于输入的顺序,对于第i颗星星,它的等级是之前输入的星星中,横坐标x小于等于i星横坐原创 2015-02-21 23:08:05 · 784 阅读 · 0 评论 -
51nod 差和问题(树状数组+离散化 (Java))
题目链接:http://www.51nod.com/contest/problem.html#!problemId=1394题目描述:有一个集合S,初始状态下有n个元素,对他进行如下操作:1、向S里面添加一个值为v的元素。输入格式为1 v2、向S里面删除一个值为v的元素。输入格式为2 v3、询问S里面的元素两两之差绝对值之和。输入格式原创 2015-11-30 21:48:04 · 899 阅读 · 0 评论 -
POJ 3067 Japan(树状数组 )
题意:在东边有n座城市,从北到南编号依次为1,2,3.n 在西边有m座城市,从北到南编号分别为1,2,3.m 现要在南北城市之间修建k条超级高速公路,求会出现多少个十字路口思路:找到合适的统计方法,先经过适当排序,再用RMQ解决//2756 KB 469 ms #include#include#include#includeusing namespace std;typedef原创 2015-03-12 19:40:15 · 578 阅读 · 0 评论 -
HDU 4046 Panda(RMQ 线段树 树状数组)
题目大意:在一串字符串中某个区间查询wbw的数目,更新某个位置的字符思路:线段树,每个枝结点记录以这个点为中心的字符是不是wbw,所以每次某个位置更新的时候,左右两个位置均要更新而且查询的时候某个区间的wbw的个数,位于边界的字符的值不能算在内//561MS 3400K 3373 B #include#include#include#includeusing namespac原创 2015-03-10 09:52:36 · 762 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort (初学树状数组)
多种方法用求逆序对数原创 2015-02-22 19:36:11 · 694 阅读 · 0 评论 -
POJ2155 Matrix (树状数组模式二)
大致题意:给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少.每次变化操作相当于把区间上的值全加一,然后对查询的结果模二即可这是树状数组第二种模式的应用: Up()表示修改区间,Down()表示求单点的值。 Down()表示修改区间,Up()表示求单点的值。 http://www.topcoder.co原创 2015-02-24 12:00:43 · 608 阅读 · 0 评论 -
HDU 2852 KiKi's K-Number(动态过程求第K小数)
题意:给出三种操作,0 在容器中插入一个数。1 在容器中删除一个数。2 求出容器中大于a的第k大元素。思路:可以用树状数组和线段树,显然a[1]+...+a[i]随i有明显的单调性,所以可以二分出答案线段树时间复杂度比树状数组的常数大了几倍...所以线段树擦边过了还有另外一种思路:二分只是二分出a[1]+...+a[i]的上界i,所以可以逆向考虑,从a[1]开始累加原创 2015-02-25 21:26:56 · 536 阅读 · 0 评论 -
POJ 3321 Apple Tree( 树状数组)
题目大意:给你一颗苹果树,树的主干设为1,每一个分支设为一个数,一直到N,代表这颗苹果树。每个分支上面只能最多有一个苹果,也就是一个枝子上面不可能有两个苹果。输入是叉之间的关系(数据是根结点向叶结点的方向)1 21 3就是主干上面两个叉分别是2 和3.下面是两种操作,Q 和CC j 的意思是如果 j 这个枝子上面有苹果就摘下来,如果没有,那么就会长出新的一个原创 2015-02-24 20:44:58 · 568 阅读 · 0 评论 -
POJ 1195 Mobile phones (二维树状数组)
题意:在一个S*S的正方形内,有两种操作 1 X Y A 是在(X,Y)这个点加A2 X1 Y1 X2 Y2 查询(X1,X2) 到 (Y1,Y2) 这个矩形范围内手机的数量而且数据的边界也是从0开始用树状数组的时候要加一处理对于求矩形面积用一个大的矩形剪去三个边界的小矩形即可ans=query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)原创 2015-02-22 21:16:07 · 645 阅读 · 0 评论 -
HOJ 2275 Number sequence(树状数组)
题意:给定一个n个元素的数列,令Ai, Aj, Ak,使得 Ai Ak 且 i 思路:可以用树状数组,每次输入一个Ai,可以查询到之前输入的比它小或比它大的有多少组,之后输入的就不得而知了,所以可以开个数组记录下来逆序再建树一次即可另外数的范围取到了0,所以每个数要自加一次,而且组数是longlong的,而且HOJ的服务器系统支持的是lld,不是i64d..wa了几次#inclu原创 2015-02-23 10:45:54 · 1201 阅读 · 0 评论 -
浅谈树状数组
一般的树状数组是从1为开始的,因为每次操作是对最低位的1操作,也就是+-lowbit(i) (lowbit(i) = i & -i)。也可以从0开始,这样每次操作就不是对最低位的1操作了,而是对最低位的0操作,也就是(lowbit(i) = ~i & i + 1)。所以从0开始的树状数组可以这样写:void update(int x, int val) { for(i原创 2016-07-09 16:00:02 · 669 阅读 · 0 评论