Poj 树状数组
来源:互联网 发布:数据产品经理书籍推荐 编辑:程序博客网 时间:2024/04/26 23:28
树状数组查询和修改复杂度都为log(n),假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log(n),而且是一个在线的数据结构,
随时修改某个元素的值,复杂度也为log(n)。
C1 = A1
C2 = A1 + A2
C3 = A3
C4 = A1 + A2 + A3 + A4
C5 = A5
C6 = A5 + A6
C7 = A7
C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
...
C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16
Ci是其后2^k个数字的和,k= i & ( -i ),是将 i 写成二进制后末尾零的个数。
做了一些题总结树状数组有这么几种应用。
1.修改一个区域,查询一个点。
2.修改一个点,查询一个区域。
3.修改一个区域,查询一个区域。
poj 2352
一维树状数组,计算一个点左下的点有多少个。y是升序的。
poj3321
一维树状数组,此题树状数组倒是好写,关键是怎么用树状数组解。
我的做法是先深搜一次,重新给每个节点编号,利用节点新的编号来做树状数组。
poj 1656
二维树状数组,修改一个区域,查询一个区域
由于格子很小,只有100*100,所以修改的时候就直接两个for循环,查询的时候利用了它和的性质。
poj 1195
二维树状数组,修改一个点的值,查询一个区域的和。
修改点[x1,y1],查询时利用容斥原理则可得ans=(Sum(x2+1,y2+1)+Sum(x1,y1)-Sum(x2+1,y1)-Sum(x1,y2+1))).
poj 2155
二维树状数组,修改一个区域的值,查询一个点的值。
修改区域[x1,y1]到[x2,y2],根据树状数组将[x1,y1]增加1,则以其为顶点的右下的所有值都增加了1
利用容斥原理,将[x1,y2+1],[x2+1,y1]再翻转一次,[x2+1,y2+1]翻转一次即可。
查询的时候只需要查询[x1,y1]这个点。
hdoj 3584
三维树状数组,修改一个长方体空间的状态,查询空间中某点的状态,和二维的相同,利用三阶的容斥原理。
代码贴到后面的文章吧
- POJ 2352 树状数组
- Poj 树状数组
- poj 1990【树状数组】
- poj 2352 树状数组
- poj 2481 树状数组
- poj 3067 树状数组
- POJ 2481 树状数组
- POJ 3067 树状数组
- POJ 2352 树状数组
- poj 2352(树状数组)
- POJ 2481 树状数组
- poj 2828 树状数组
- POJ 3928 - 树状数组
- POJ 3321 树状数组
- POJ 2352 树状数组
- poj 2481 树状数组
- poj 3321 树状数组
- poj 3928 树状数组
- 转:Linux 系统信息查看命令大全
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
- Glassfishv3 domain管理1
- 知行合一难在哪
- 检查网络是否可以连接互联网
- Poj 树状数组
- Qt标准对话框之QColorDialog
- vs2010 rdlc .net4.0 卸载 Appdomain 时出错。 (异常来自 HRESULT:0x80131015) 解决办法
- HTTP协议header头域
- 软件工程思维导图
- 一个封装的jacob类
- Android Widget画面转屏后失去自动刷新效果
- svn apache 安装 权限设置
- 关于Windows 2003 x86非系统盘安装IIS6出现HTTP 500和asp(aspx)网站发布