树状数组入门之POJ 2352 Star
来源:互联网 发布:个人如何开通淘宝直播 编辑:程序博客网 时间:2024/06/07 05:51
树状数组BIT(Binary index tree)
对于树状数组而要我们可以发现树状数组的那个图就是线段树的去掉所有右孩子节点得到的,因此树状数组相当于在线段树上做了一个优化,相当于去掉了一个常数,并且空间上也进行了优化,线段树通常需要比原来大小开4倍,但是树状数组就不用,但是树状数组只提供2种操作,一个就是询问1到x的所有数的和,另一个就是对单点进行更新,其他操作较为复杂。
操作一
int sum(int x){ int res = 0; while(x){ res += bit[x]; x -= x&-x; } return res;}
操作二
void add(int x, int y){ while(x <= maxn){ bit[x] += y; x += x&-x; }}
本题分析
因为Y坐标是单点递增的,所以对于只需要统计其他所有点X坐标小于或者等于X的个数,然后进行更新即可。。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 32050;int bit[maxn], vis[maxn], N;int sum(int x){ int res = 0; while(x){ res += bit[x]; x -= x&-x; } return res;}void add(int x, int y){ while(x <= maxn){ bit[x] += y; x += x&-x; }}int main(){ while(scanf("%d", &N) != EOF){ memset(bit, 0, sizeof(bit)); memset(vis, 0, sizeof(vis)); int x, y; for(int i = 0; i < N; i++){ scanf("%d%d", &x, &y); ++x; vis[sum(x)]++; add(x, 1); } for(int i = 0; i < N; i++) printf("%d\n", vis[i]); } return 0;}
0 0
- 树状数组入门之POJ 2352 Star
- poj 2352 star 树状数组
- 树状数组 POJ 2352 Star
- POJ 2352 Star 树状数组
- POJ 2352 Star (树状数组)
- POJ 2352 star (树状数组)
- POJ 2352 Star Treap||树状数组
- poj 2352 star 树状数组的变型应用
- poj 2352 树状数组入门
- poj 树状数组入门 2352
- poj 2352 入门树状数组
- 树状数组 之 poj 2352
- hdu1541 star 树状数组
- POJ 2352 Stars 树状数组(入门)
- poj 2299 树状数组入门
- HDU 1541 star 树状数组
- POJ 2352 树状数组
- poj 2352 树状数组
- nexus私服学习总结
- RequireJS:一款优秀的AMD模块加载器
- 68. Text Justification
- 利用SVN实现增量打包
- Java Web错误页面
- 树状数组入门之POJ 2352 Star
- 欢迎使用CSDN-markdown编辑器
- eclipse F3可以看到class的定义,但是编辑器里有叉叉,refers to type "", 类型不匹配
- swift 关于 CocoaPods引入Alamofire报警告问题
- Unity Shaders——屏幕特效混合模式(Blend mode with screen effects)
- Hadoop错误笔记
- eclipse 设置全部的背景颜色
- Reed Solomon纠删码
- 第9周项目4-广义表算法库及应用(2)