POJStars2352(树状数组学习)
来源:互联网 发布:datagridview刷新数据 编辑:程序博客网 时间:2024/05/09 09:18
POJStars2352(树状数组)
这个题意这的是太令人难懂哈,为了学习树状数组只有硬着头皮搞了,树状数组是一个tree数组记录了和的所有数组,不过不是从起点开始的,要求从起点开始的还得调用一个get()函数,见图:
这个图上的这个横条就是各个tree的值,get函数的原理就是黑线画的这样了。
之后再更新:
用add
这个图是包括这个节点的所有tree数组,所以这个都要加一个这个值了。
我的:
#include<iostream>#include<string>#include<cstdio>#include<cmath>#include<map>#include<algorithm>#include<cstring>using namespace std;const int maxn=32000+10;#define PI acos(-1.0)int tree[maxn];inline int lowbit(int x){ return x&(-x);}void add(int x,int value)//更新操作,对各个tree数组{ for(int i=x;i<=maxn;i+=lowbit(i)) { tree[i]+=value; }}int get(int x)//得出各个从原点到这个节点的sum{ int sum=0; for(int i=x;i>0;i-=lowbit(i)) { sum+=tree[i]; } return sum;}int main(){ int n; while(scanf("%d",&n)!=EOF) { int cnt[maxn]; memset(cnt,0,sizeof(cnt)); memset(tree,0,sizeof(tree)); for(int i=0;i<n;i++) { int x,y; scanf("%d%d",&x,&y); int sum=get(x+1);//防止出现x为0的情况 cnt[sum]++;//cnt数组记录的事不同sum所出现的次数 add(x+1,1); } for(int i=0;i<n;i++) { cout<<cnt[i]<<endl; } } return 0;}
这是入门啦,加油;
0 0
- POJStars2352(树状数组学习)
- 【树状数组】学习树状数组
- 树状数组 学习
- 树状数组的学习
- 树状数组学习资料
- 树状数组学习小结
- 树状数组学习
- 树状数组学习笔记
- 树状数组学习资料
- 树状数组学习
- 树状数组学习小结
- 树状数组学习笔记
- 学习笔记----树状数组
- 树状数组学习 ----- 数据结构
- 树状数组学习总结
- 树状数组学习小结
- 树状数组学习总结
- 树状数组学习笔记
- CentOS6.3 Samba安装配置、多用户、加域
- GMM及EM算法
- 正则化
- 谈谈今天第一次使用Mybatis访问MySql数据库的过程
- HDU 1285 (拓扑排序模板)
- POJStars2352(树状数组学习)
- tjut4649
- VC中CListCtrl获取当前选中行索引号
- Rescue<hdoj1242>
- Android反编译及重新打包
- git和svn(Subversion)的一些区别
- 【z01】铺地毯
- marquee标签实现跑马灯效果--无缝滚动
- nginx,haproxy,lvs负载均衡的对比