树状数组
GocNeverGiveUp
这个作者很懒,什么都没留下…
展开
-
树状数组的三个基本函数
上次听强哥讲完之后没怎么复习过,趁着放假时间多赶紧看看核心代码有三:一, 核心lowbit函数,得到一个数的二进制最低位的1,代码很简单,但是是最核心的代码int lowbit(int x){ return x & (-x);}例如10的二进制是1010,返回值应该为2即二进制的10二,求和函数getsumint getsum(int x){原创 2018-02-05 16:08:50 · 267 阅读 · 0 评论 -
POJ 2352 Stars + HDU 1556 Color the ball(树状数组单点更新及伪区间更新)
B - Stars POJ - 2352这种题用线段树和树状数组都能做,第一次用树状数组做题,代码量更小这道题是单点更新,直接挂代码#include<iostream>#include<cstring>#include<cstdio>#include<algorit...原创 2018-02-11 11:21:41 · 170 阅读 · 0 评论 -
POJ 3067 Japan(利用树状数组求逆序数)
利用树状数组和线段树都可以求解逆序数,树状数组代码量更小一些,学这个先给个链接,传送门 : 树状数组求逆序数,写的还可以,给定的代码中有一个地方写错了,应该是ans += i - getsum(a)而不是ans+=i-insert(a),给出一些详细的解释,如果每一个数都是按顺序(全排列)放入树状数组里的话,每个数对应的 i - getsum(a)都是零,最后求出的ans必然是零,这个是关键所在很...原创 2018-02-16 20:19:34 · 383 阅读 · 0 评论 -
利用树状数组解决约瑟夫的环
此问题非常经典,在网上即可找到原题,在此不做描述。对于原问题模型,一有链表法解决问题,效率极低,在此描述一种用树状数组完成问题的超快速做法。首先,我们可以有这样递推的思路:不断加k模n,并减去其数字前走了的人即为当前人的真实编号(即是这一轮应踢走的人的编号),如何快速维护每个人其前走了的人的和,答案为树状数组。现在模拟一下过程,假设有6个人,k=3(每报3个,走一个人)。初始状态:1 2 3 4 ...转载 2018-03-16 21:24:26 · 531 阅读 · 0 评论 -
POJ 1195 Mobile phones(二维树状数组)
二维树状数组和一维树状数组其实很相似,不过由于是二维的,在进行区间求和的时候有一定的技巧性先简单介绍一下二维树状数组存储方式:二维树状数组是在树状数组的基础上拓展而来的一个由数字构成的大矩阵,能进行两种操作对矩阵里的某个数加上一个整数(可正可负)或查询某个子矩阵里所有数字的和,要求对每次查询,输出结果。一维树状数组很容易扩展到二维,在二维情况下:数组A[N][N]的树状数组定义为:设原始二维数组为...原创 2018-02-20 18:30:05 · 374 阅读 · 0 评论 -
HDU 6318 Swaps and Inversions(树状数组 + 离散化)
HDU - 6318题意:给定一个整数序列,如果交换两个相邻数,花费y元,每消除一个逆序数需花费x元,其实x,y等效,学完线代就知道,每次交换两个相邻的数,逆序数必定改变,而我们必定向着逆序数减小的方向进行,所以我们每次花费x或者y元都可以使逆序数减小1,这样问题就转化为求序列的逆序数,最后结果乘上min(x, y)即可。问题就在于序列中的数太大了,树状数组存不下,需要离散化一下#i...原创 2018-07-30 10:32:50 · 351 阅读 · 0 评论