树状数组
文章平均质量分 77
sdj222555
这个作者很懒,什么都没留下…
展开
-
ZOJ 3612 树状数组 第K大数
题意就是有大约1-10000个操作,每次插入或者删除一个数,每次操作后的中位数都要输出 然后思路就比较清晰了, 先把数据都读进来,所有的数存起来离散化,然后再处理每个操作,每次维护树状数组即可,然后如果整个序列有奇数个,就直接二分找最中间的,如果偶数个就找两个数。 这题比较恶心的就是输出了。用cout按理说最好了,但是会超时,用long long的话,除以2的时候判奇数输出.5也会挂,除非转原创 2012-06-30 10:55:27 · 1896 阅读 · 0 评论 -
HDU 4456 Crowd 坐标旋转 二维树状数组
大意就是给出一个矩阵 初始每个位置上的值都为0 然后有两种操作 一种是更改某个位置上的值 另一个是求某个位置附近曼哈顿距离不大于K的所有位置的值的总和 然后这里用了一个非常牛叉的技巧 将所有点绕原点左旋45° 然后新的坐标也很好计算 x' = (x - y) * sqrt(2) / 2 y' = (x + y) * sqrt(2) / 2 由于都是小数 所以乘个sqr原创 2013-09-01 16:29:14 · 2167 阅读 · 0 评论 -
HDU 4605 Magic Ball Game 树状数组
题目大意很简单。 有一颗树(10^5结点),所有结点要么没有子结点,要么有两个子结点。然后每个结点都有一个重量值,根结点是1 然后有一个球,从结点1开始往子孙结点走。 每碰到一个结点,有三种情况 如果此球重量等于该结点重量,球就停下了 如果此球重量小于该结点重量,则分别往左右儿子走的可能都是1/2 如果此球重量大于该结点重量,则走向左儿子的概率是1/8,右儿子的概率是7/8 然后若干原创 2013-08-04 13:00:12 · 1824 阅读 · 0 评论 -
POJ 3928 Ping pong 树状数组
树状数组的运用 具体就是枚举每个裁判,左边比裁判小的个数乘以右边比裁判大的个数,以及左边比裁判大的个数乘以右边小的个数,总和即为结果 /* ID: sdj22251 PROG: calfflac LANG: C++ */ #include #include #include #include #include #include #include #include #incl原创 2011-08-16 13:31:59 · 1115 阅读 · 0 评论 -
POJ 2352 Stars 树状数组
这道题是标准的树状数组,而且输入数据已经有序。所以边输边查询就行。后输进来的不影响之前的结果/* ID: sdj22251 PROG: calfflac LANG: C++ */ #include #include #include #include #include #include #include #include #include #include #include原创 2011-08-19 21:07:29 · 491 阅读 · 0 评论 -
POJ 2481 cows
还是太弱,很明显的一道树状数组竟然很久想不出来。这道题如果想到如何排序了,就好做了。 按题目题意,我们要找强壮的,那么就先把最强壮的找出来,存起来,然后找第二强壮的,此时已经知道比他强壮的牛有多少头了,依次类推,最后所有牛的结果都能求出来,如果从最弱的开始找,显然是无法找出来的。 然后注意一下区间重合时一定要特判。每头牛都要插入树状数组中。 /* ID: sdj22251 PRO原创 2011-08-26 11:10:28 · 592 阅读 · 0 评论 -
POJ 1195 Mobile phones 二维树状数组
二维树状数组是为了矩阵的某个区域快速求和,其原理是一样的,可以对每一维都是用树状数组的原理求和,就相当于把二维数组当做一个一维数组,每个元素又都是一维数组,比如,里面的那个循环是把行的和求出来,外面的循环则是把这些和的和求出来,从而能求解矩阵某个区域的和。 这道题需要注意的就是下标是从0开始的。 /* ID: sdj22251 PROG: inflate LANG: C++ */ #inc原创 2012-01-28 17:55:03 · 928 阅读 · 0 评论 -
POJ 2182 Lost Cows 线段树 or 树状数组
这道题还是很经典的 给出了一个序列,代表的是比该位置的牛靠前站的且序号比他小的牛的个数 然后思想类似于2828,正序看的话,看不出有什么规律,但是逆序的话,就能看出当前序列的最后一头牛的编号是可以确定的,就相当于有一个队列,初始化全为1,有牛占了就把相应位置变为0,然后我们只管那些位置为1的地方,往里一头一头的塞牛,塞一头,能塞的地方就少一个,但是和之前塞过的就没关系了,这也符合题目中,只管比原创 2012-01-29 17:09:39 · 945 阅读 · 0 评论 -
POJ 2155 Matrix 二维树状数组
又是一道树状数组的题目,而且是一道二维的好题 题目要求是,一些操作,可能是对某个矩阵内的所有值取反,可能是问的是某个位置的值 如图 假如我们要把B矩阵的所有值都取反,我们只需要操纵矩阵的四个顶点即可,更新左下角顶点的值增1相当于把区域ABCD的变换次数增1,左上角顶点的值增1,相当于区域AC的变换次数增1,右上角顶点的值增1,相当于区域C的变换次数增1,右下角顶点的值增1,相当于区域原创 2012-02-05 21:55:50 · 764 阅读 · 0 评论 -
POJ 3067 Japan 二维树状数组
是一个比较不错的题目。 题目大意是,在一张地图上,西边从上到下均匀排了一列点,东边也是这样,然后给出若干个边,都是从西边的点连到东边的点上。问最后这些边的交点,所谓交点,就是两个边交叉得到的交点,如果交点在结点上,是不算数的。 首先思考一下基本做法,很容易想到,跟某条边相交的边数,跟其在东边和西边的编号有关系。然后就发现,如果某条边在西边的编号大于这条边,并且东边的编号小于这条边,就会出现交叉原创 2012-02-09 01:20:13 · 998 阅读 · 0 评论 -
POJ 2464 Brownie Points II 树状数组||线段树
这题不是一般的恶心人,简直就是个神题。 参考了一个大牛的思路写了个树状数组版本的,不推荐用线段树,但是练练线段树也不错。 http://hi.baidu.com/czyuan_acm/blog/item/af6fe8a9177f7ef51e17a2ea.html 这道题用二分也可以做的,这里介绍下树状数组的做法。首先有n个点,过每个点可以做x,y轴,把平面切成BL,原创 2012-03-14 15:44:15 · 1564 阅读 · 0 评论 -
HDU 3333 Turing Tree 线段树 or 树状数组
给出一组序列,问某个区间内序列的和,跟普通求和不同的是,要求值相同的元素只能算一次。 首先看数据范围,就知道要离散化,不然没法标记某个数是否出现过。 然后要对要查询的区间进行排序,按右端点进行排序。 然后按顺序遍历点,如果该点的值以前出现过,就删掉以前的那个,然后插入该点,记录下这个值的位置。刚才已经对询问区间排序了,那么所有右端点在该点的区间都可以进行查询了。 那么为什么要这么干呢。观察原创 2012-03-22 20:15:02 · 1349 阅读 · 0 评论 -
POJ 3321 apple tree 树状数组
题目大意,就是给出一棵树,可能有很多叉,然后每个叉上长一个苹果,有两种操作,第一种是C ,意思就是change,如果这个叉上有苹果,就摘掉,如果没有,就长一个。 另一种操作是Q,意思就是询问,问的是某个结点及其子树上的苹果有多少个。 这是很明显的区间求和问题,用树状数组来很方便,关键是这个是树形的结构,所以必须先把树映射出来,也就是相当于把数据离散化了,这里就要先进行一次DFS了,开两原创 2012-04-04 17:02:32 · 1233 阅读 · 1 评论